2010-10-20 11 views

risposta

8

se si guarda la fonte di DataInputStream si può vedere che chiude anche i flussi sottostanti. quindi non hai bisogno. e questo è (o dovrebbe essere) vero per tutti i tipi di stream.

+3

Più precisamente, è documentato. È un po 'frammentato, ma 'DataInputStream' eredita' close' da 'FilterInputStream', che documenta che chiama' close' sul sottostante 'InputStream': http://download.oracle.com/javase/6/docs/api /java/io/FilterInputStream.html Quindi sai che il comportamento non è solo un effetto collaterale di una particolare implementazione. –

+0

In realtà è vero per tutti i tipi di 'Closeable' –

+2

@Sherwin ... a condizione che implementino correttamente il" contratto ":-) –

1

Karazi, ha ragione a suggerirlo. Inoltre, solo per avere un'idea e un po 'più di intuizione, l'API IO di Java viene effettivamente implementata utilizzando il pattern di decoratore. Puoi dare un'occhiata a decorator pattern su wiki.

1

Attenderei la chiusura in un blocco finale solo per verificare che sia correttamente scaricata in caso di un'eccezione.

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ì hai ragione ma questo solleva una nuova domanda: come gestire l'IOException che può essere lanciata da in.close ?? Aggiungi try catch in finally block o lo inoltra al livello superiore? –

+0

Sì, non è proprio un hopw. Normalmente lo faccio – willcodejavaforfood

+0

@Manuel Selva - Separo sempre la gestione delle eccezioni dalla logica aziendale. Avrei un metodo chiamato 'doWhatever()' che chiama tryToDoWhatever in un blocco try/catch per gestire le eccezioni in là – willcodejavaforfood

3

Userò questa opportunità per rispondere con una risposta che ho già fatto.

Utilizzando Project Lombok è possibile consentire a Lombok di chiudere correttamente i flussi per voi. Dettagli possono essere trovati here.

Problemi correlati