【发布时间】:2016-01-21 10:09:33
【问题描述】:
如果流没有手动关闭,我想知道它什么时候关闭。我的意思是,如果它的引用范围不再是流,它会被关闭吗?
考虑以下示例场景。
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 的 linux 命令或选项来检查?
感谢任何帮助!
【问题讨论】:
-
作为一项规则,您应该始终关闭
finally块(或 try-with-resources)中的所有流(以及一般的 Closeables) -
此时,我坐在椅子上,试图记住我打开的所有 Java 流,并假设它们自动关闭了范围。过去 15 年。然后,我站起来大喊“C++ 我非常爱你”。
标签: java stream inputstream outputstream