java - 如果流没有手动关闭,什么时候关闭?

标签 java stream inputstream outputstream

我想知道如果流没有手动关闭,它什么时候关闭。我的意思是,如果流的引用范围不再存在,流是否会被关闭?

考虑以下示例场景。

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 命令或选项来检查?

感谢任何帮助!

最佳答案

我认为 JVM 规范对此没有任何保证。您真的应该最终关闭这些资源。

当进程结束时,操作系统将释放与其关联的所有资源(包括内存、文件句柄和网络套接字)。

有一些操作系统工具可以检查打开的文件和流,例如 lsof .

关于java - 如果流没有手动关闭,什么时候关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33275797/

相关文章:

javascript - 带有nodejs axios和vanilla javascript中的异步等待模式的数组文件下载器

java - 将输入流转换为文件

java.lang.ClassCastException : java. lang.Short 无法转换为 java.lang.Integer

java - Java 7 的 SSL 连接失败

java - 没有方法的接口(interface)与字段

c++ - 自定义流操纵器

java - 有没有一种在浏览器中运行java应用程序的现代方法?

C# 数组与流

android - InputStream.read() 在读取文件时挂起

java - FileDescriptor.in 与 System.in