Ho un'esperienza audio nel linguaggio di programmazione Java. Ma una cosa che è sempre stata nella mia mente è perché è necessario close()
java.io.InputStream
o sue sottoclassi?Perché è bello chiudere() un inputstream?
Ora con java.io.OutputStream
, dicono FileOutputStream
, dopo aver scritto su un file, se non close()
il flusso di output, i dati che abbiamo voluto scrivere nel file rimane nel buffer e non è scritto nel file.
Quindi diventa necessario close()
un OutputStream
. Ma non ho mai avuto esperienze amare dopo lo non chiudendo un InputStream
.
Ma ancora tutti gli articoli su Internet e sui libri dicono che è sempre bene chiudere qualsiasi Stream potrebbe essere un InputStream
o uno OutputStream
.
Quindi la mia domanda è: perché è necessario a close()
un InputStream
? La gente dice che potresti trovarti di fronte a una perdita di memoria di te non close()
. Quindi che tipo di perdita di memoria è quella?
risorsa-fuga è probabilmente più di una preoccupazione qui. La gestione di inputstream richiede che il sistema operativo utilizzi le sue risorse e, se non lo si libera una volta che lo si utilizza, si esauriranno le risorse. – Andy
In alcune JVM, il kernel sottostante manterrà aperto un FIS (come lo sottolineo) finché: A) non si chiude il flusso o B) si chiude la JVM. Altri flussi (specialmente quando si hanno a che fare con le prese) lasciano sapere altre cose quando hai finito. Ad esempio, chiudendo un OutStream da un Socket, si chiude anche il corrispondente inputstream sull'altro lato di Internet. – mailmindlin
@mailmindlin No, non lo è. Nessun flusso si chiude automaticamente. Devi chiuderli da soli. – EJP