Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Flujo a Cerrar?

Estas en el tema de Flujo a Cerrar? en el foro de Java en Foros del Web. Hola de nuevo, en el tratamiento de ficheros cuando utilizamos los flujos de datos para leer o escribir en ellos me queda la duda del ...
  #1 (permalink)  
Antiguo 06/03/2014, 08:10
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 13 años
Puntos: 1
Flujo a Cerrar?

Hola de nuevo, en el tratamiento de ficheros cuando utilizamos los flujos de datos para leer o escribir en ellos me queda la duda del cierre de esos flujos, segun he leido dice que con cerrar el mas externo es suficiente pero me queda esa duda, por ejemplo:

FileInputStream fi = new FileInputStream(f);
DataInputStream d = new DataInputStream(fi);

Con este ejemplo segun dicen cerrando fi queda todo cerrado? es decir poniendo:
fi.close()

o hay que cerrar los 2? fi.close() y d.close()

Gracias y un saludo.
  #2 (permalink)  
Antiguo 06/03/2014, 08:33
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Flujo a Cerrar?

Hola:

Los InputStream que reciben en su constructor otro InputStream (en este caso DataInputStream recibe un FileInputStream), no son flujos reales, son solamente "capas" que se añaden sobre el flujo real para facilitar alguna tarea (por ejemplo, en este caso, readInt() readFloat() etc en vez de solo get() bytes). En los patrones de diseño se llama patrón decorador.

Si cierras el externo, lo unico que va a hacer es llamar al close() del interno y así sucesivamente hasta llegar al flujo real, que es el más interno. El close() de DataInputStream lo unico que hace es llamar al close() de FileInputStream, que es el que realmente cierra el fichero. En la API de DataInputStream puedes ver para close() "The close method of FilterOutputStream calls its flush method, and then calls the close method of its underlying output stream."

Si cierras directamente el interno, también te vale.

Resumiendo, puedes cerrar cualquiera de ellos independientemente de su nivel, puesto que los más externos van a ir llamando a los de abajo hasta llegar al último que es el único flujo real a fichero.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 06/03/2014, 08:37
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 13 años
Puntos: 1
Respuesta: Flujo a Cerrar?

Ok amigo, gracias por tan tremenda explicacion, ya resolvi esa duda.



Etiquetas: flujo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:01.