2010-10-20 11 views

Respuesta

8

si mira la fuente de DataInputStream, verá que también cierra las transmisiones subyacentes. para que no lo necesites y esto es (o debería ser) cierto para todo tipo de transmisiones.

+3

Más al punto, está documentado. Está un poco fragmentado, pero 'DataInputStream' hereda' close' de 'FilterInputStream', que documenta que llama' close' en el 'InputStream' subyacente: http://download.oracle.com/javase/6/docs/api /java/io/FilterInputStream.html Para que sepa que el comportamiento no es solo un efecto secundario de una implementación en particular. –

+0

En realidad es cierto para todos los tipos de 'Closeable' –

+2

@Sherwin ... siempre que implementen el" contrato "correctamente :-) –

1

Karazi, está en lo cierto al sugerir eso. Además, solo para obtener una idea y un poco más de conocimiento, la API IO de Java se implementa con un patrón de decorador. Puedes ver decorator pattern en wiki.

1

Pegaré el cierre en un bloque final solo para asegurarme de que se enjuaga adecuadamente en caso de una excepción.

public void tryToDoWhatever() throws Exception 
{ 
    DataInputStream in = null; 
    try 
    { 
     in = new DataInputStream(
       new BufferedInputStream(new FileInputStream(file))); 
    } 
    finally 
    { 
     if (in != null) 
      in.close(); 
    } 
} 
+0

Sí, tiene razón, pero esto plantea una nueva pregunta: ¿Cómo manejar la IOException que puede ser lanzada por in.close? ¿Agregar try catch in finally block o reenviarlo en el nivel superior? –

+0

Sí, eso no es del todo cierto, normalmente lo hago – willcodejavaforfood

+0

@Manuel Selva - Siempre separe el manejo de excepciones de la lógica comercial. Tendría un método llamado 'doWhatever()' que llama a tryToDoWhatever en un bloque try/catch para tratar las excepciones allí – willcodejavaforfood

3

Usaré esta oportunidad para responder con una respuesta que ya he hecho anteriormente.

Al usar Project Lombok puede dejar que Lombok cierre correctamente las transmisiones por usted. Los detalles se pueden encontrar here.

Cuestiones relacionadas