【发布时间】:2014-12-19 21:55:24
【问题描述】:
为什么需要close()java.io.InputStream或其子类?
现在有了java.io.OutputStream,比如说FileOutputStream,在写入一个文件之后,如果我们不close()输出流,我们打算写入文件的数据保留在缓冲区中并且不会被写入到文件中。
因此有必要close() 和OutputStream。但是在不关闭InputStream之后,我从未有过任何痛苦的经历。
但是互联网上的所有文章和书籍仍然说关闭任何流总是好的,可能是InputStream 或OutputStream。
所以我的问题是,为什么需要close() 和InputStream?人们说你可能会面临内存泄漏你不close()它。那么这是一种什么样的内存泄漏呢?
【问题讨论】:
-
资源泄漏在这里可能更令人担忧。处理输入流需要操作系统使用它的资源,如果你使用它后不释放它,你最终会耗尽资源。
-
在某些 JVM 中,底层内核将保持 FIS 打开(据我所知),直到您:A)关闭流或 B)JVM 退出。其他流(尤其是在处理套接字时)让其他东西知道您何时完成。例如,当从 Socket 关闭 OutStream 时,互联网另一端的相应输入流也会关闭。
-
@mailmindlin 不,它没有。没有流自动关闭。你必须自己关闭它们。
-
您不必为所有子类关闭它。例如,
java.io.ByteArrayInputStream不使用任何文件描述符,因此关闭它是无操作的,请参阅docs.oracle.com/javase/8/docs/api/java/io/…
标签: java buffer inputstream outputstream