java – 为什么要关闭()一个输入流?

前端之家收集整理的这篇文章主要介绍了java – 为什么要关闭()一个输入流?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 Java编程语言方面有丰富的经验.但是,我一直以来一直在想,为什么要关闭()java.io.InputStream或其子类呢?

现在用java.io.OutputStream说FileOutputStream,在写入一个文件之后,如果我们不关闭()输出流,我们打算在文件中写入的数据保留在缓冲区中,不会写入文件.

所以必须关闭()一个OutputStream.但是在没有关闭InputStream之后,我从来没有任何痛苦的经历.

但是互联网和书籍上的所有文章仍然说,关闭任何Stream总是很好,可能是InputStream或OutputStream.

所以我的问题是为什么要关闭()一个InputStream?人们说你可能会面临一个内存泄漏你不要关闭()它.那么什么样的内存泄漏呢?

解决方法

一个InputStream绑定了一个小内核资源,一个低级别的文件句柄.此外,只要您打开读取文件,该文件将在某种程度上被锁定(从删除,重命名).让我们想象你不关心锁定的文件.最终,如果您需要阅读另一个文件,并用新的InputStream打开它,内核会为您分配一个新的描述符(文件流).这将加起来.

这只是一个时间问题,直到长时间运行的程序出现程序失败.

处理器的文件描述符表的大小有限.最终,文件句柄表将用完该过程的空闲插槽.即使是数千,您仍然可以轻松地将其用于长时间运行的应用程序,此时,您的程序将无法再打开新的文件套接字.

进程文件描述符表与以下简单化一样:

IOHANDLE fds[2048];  // varies based on runtime,IO library,etc.

你从3个插槽开始.填写完毕,您对自己执行了拒绝服务.

原文链接:https://www.f2er.com/java/126163.html

猜你在找的Java相关文章