Mi chiedevo quale sia il modo migliore/appropriato per rilasciare risorse/handle di file.Rilascio corretto della risorsa I/O
codice tradizionale,
BufferredInputStream stream = null
try{
----
stream = new BufferredInputStream(new FileInputStream());
----
} finally{
if(stream != null){
stream.close()
}
}
Intende la handle di file essere rilasciato chiudendo BufferredInputStream.close
da solo o ha bisogno il sottostante stream(i.e. FileInputStream.close())
anche di essere chiamato in modo esplicito.
P.S. Javadoc for [FilterOutputStream.close]
metodo specifica che chiuderà esplicitamente anche il flusso sottostante. Ma altri flussi non sembrano avere questo nel documento.
[FilterOutputStream.close]: http://docs.oracle.com/javase/1.4.2/docs/api/java/io/FilterOutputStream.html#close%28%29
Si prega di consulenza. Grazie in anticipo.
È possibile testarlo facilmente chiudendo solo l'oggetto BufferredInputStream e cercando di manipolare FileInputStream e vedere se viene sollevata un'eccezione di flusso chiuso. Credo che sarà chiuso come puoi vedere in molti esempi di documenti. Lo stream sottostante è creato in modo anonimo. – giorashc
Solo un suggerimento: se stai usando JDK 7, usa il try-with-resources, è molto più semplice. Vedi [qui] (http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html). –
Grazie per il suggerimento JavaNewbie_M107. Java 7 non è stato ancora aggiunto al progetto. Non vedo l'ora di farlo –