Ciao a tutti capisco che se leggiamo byte da uno InputStream e abbiamo finito di leggere tutti i byte (o non intendiamo leggere fino alla fine del flusso), dobbiamo chiamare close() per rilasciare le risorse di sistema associate al flusso.Gli stream si chiudono automaticamente in caso di errore?
Ora mi stavo chiedendo se ho read byte e getta un java.io.IOException, sono ancora obbligato a chiamare close() per rilasciare le risorse di sistema associate al flusso?
Oppure è vero che su errori, i flussi vengono chiusi automaticamente, quindi non dobbiamo chiamare close()?
Le risorse sono chiusi quando GCed. Quindi puoi avere un problema che raramente fa funzionare un'eccezione ok. Per la gestione delle risorse deterministiche, deve essere sempre chiamato close(). –
@PeterLawrey Stai dicendo che è ** perché ** il GC mangia tranquillamente la IOException lanciata da 'close()' che dovremmo chiamare 'close()' noi stessi? Quindi se (ipoteticamente) l'interfaccia di close() non genera alcuna forma di Eccezione, non dobbiamo chiamare close() quando un flusso ha un errore? – Pacerier
Questo è qualcosa da considerare, tuttavia è piuttosto comune ignorare qualsiasi eccezione lanciata da close(). Il problema con il lasciar fare il GC è che puoi eseguire i nostri handle di file prima di attivare un GC che pulisce queste risorse. Il tuo programma può sembrare funzionare, ma fallire occasionalmente che è qualcosa che vuoi evitare. –