ストリームをクローズしていない場合は、ストリームをいつ閉じるかを知りたいです。これは私の言いたいことですが、ストリームの参照の範囲がもうなくなると、ストリームは閉じられますか?ストリームはいつ手動で閉じられないのですか?
次のサンプルシナリオを検討してください。ここで
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.")
}
...
}
、私はストリームで行わいたら、私はmyMethod()
が、今度はプロセスが、終了しないと他の操作とに行くのプログラムを終了しています。
ストリームを閉じなかった。クラスAへの参照のスコープが終了すると自動的に閉じられますか? (すなわち、myMethod()
が終了すると)? GCはそれを処理しますか?また、プロセスが終了するとストリームがクローズされ、システムは他のプロセス用に保持されているすべてのリソースを解放することも読んでいます。ストリームが開いているかどうかはどうすれば確認できますか? Javaのコマンドやオプションがありますか?
ご協力いただきましてありがとうございます。
「finally」ブロック(またはtry-with-resources)ですべてのストリーム(およびCloseables一般)を閉じる必要があります –
この時点で、私は私の椅子に座って、私は試しています私が開いたすべてのJavaストリームを覚えておいて、それらが自動的に範囲外に閉じ込められたと仮定しました。過去15年間。それから、私は起き上がり、「C++あなたをとても愛している」と叫びます。 – Chameleon