加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 19:27:54 所属栏目:Java 来源:网络整理
导读:我在 Java编程语言方面有丰富的经验.但是,我一直以来一直在想,为什么要关闭()java.io.InputStream或其子类呢? 现在用java.io.OutputStream说FileOutputStream,在写入一个文件之后,如果我们不关闭()输出流,我们打算在文件中写入的数据保留在缓冲区中,不会写
我在 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个插槽开始.填写完毕,您对自己执行了拒绝服务.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读