Vorrei sapere quando chiude un flusso se non è chiuso manualmente. Con questo voglio dire, il flusso sarà chiuso se lo scopo del suo riferimento non è più?Quando chiude un flusso se non viene chiuso manualmente?
Considerare il seguente scenario di esempio.
Class A{
InputStream in;
OutputStream out;
A(){
// Initialize and create the streams.
}
...
}
Class B{
public void myMethod(){
A a = new A();
System.out.println("End of my method.")
}
...
}
Qui, una volta che mi sono fatto con il flusso, sto uscendo myMethod()
ma il programma che a sua volta il processo, non è terminato e prosegue con altre operazioni.
Non ho chiuso i flussi. Si chiuderà automaticamente una volta terminato lo scopo del riferimento alla classe A? (ad esempio, quando termina myMethod()
)? GC si prende cura di questo? Inoltre, ho letto che gli stream verranno chiusi una volta che il processo è terminato e il sistema rilascia tutte le risorse a disposizione per altri processi. Come possiamo verificare se lo stream è aperto o no? Ci sono dei comandi o opzioni linux da Java per verificarlo?
Qualsiasi aiuto è apprezzato!
Come regola, è necessario chiudere sempre tutti gli stream (e Closeables in generale) in un blocco 'finally' (o provare con risorse) –
A questo punto, mi siedo sulla sedia, e sto provando per ricordare tutti i flussi Java che ho aperto e presumo che abbiano chiuso automaticamente fuori dal campo di applicazione. Per gli ultimi 15 anni. Poi, mi alzo e urlo "C++ ti amo così tanto". – Chameleon