Ich würde gerne wissen, wann ein Stream schließt, wenn es nicht manuell geschlossen wird. Damit meine ich, wird der Strom geschlossen, wenn der Umfang seiner Referenz nicht mehr ist?Wann schließt ein Stream, wenn er nicht manuell geschlossen wird?
Betrachten Sie das folgende Beispielszenario.
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.")
}
...
}
Hier einmal bin ich mit dem Strom gemacht, ich myMethod()
aber das Programm, das der Prozess wiederum geht nicht mit anderen Operationen beendet und bin zu verlassen.
Ich habe die Streams nicht geschlossen. Wird es automatisch geschlossen, sobald der Umfang der Referenz auf die Klasse A endet? (dh. Wenn myMethod()
endet)? Kümmert sich GC darum? Außerdem lese ich, dass die Ströme geschlossen werden, sobald der Prozess endet und das System alle Ressourcen freigibt, die für andere Prozesse für es gehalten werden. Wie können wir überprüfen, ob der Stream geöffnet ist oder nicht? Gibt es Linux-Befehle oder -Optionen von Java, um das zu überprüfen?
Jede Hilfe wird geschätzt!
In der Regel sollten Sie immer alle Streams (und Closeables im Allgemeinen) in einem 'finally' Block (oder Try-with-resources) schließen –
An diesem Punkt lehne ich mich in meinem Stuhl zurück, und ich versuche es Ich erinnere mich an alle Java-Streams, die ich geöffnet habe, und ich nahm an, dass sie automatisch außerhalb des Bereichs geschlossen wurden. Seit 15 Jahren. Dann stehe ich auf und schreie "C++ Ich liebe dich so hart". – Chameleon