当前位置:  开发笔记 > 编程语言 > 正文

在Java中关闭Streams

如何解决《在Java中关闭Streams》经验,为你挑选了6个好方法。

在我们离开程序之前,为什么我们需要在任何情况下关闭FileInputStream(和一般的流)?否则会发生什么?如果程序在程序中明确关闭输入流之前停止,则流是否也会自动关闭?



1> duffymo..:

文件句柄是稀缺的,有限的资源.如果你没有正确清理它们,就像数据库连接一样,你可以用完它们.

如果你只用一个用户编写了一个小程序,那么你就可以邋in而不是在finally块中关闭.

但是,如果您最终在具有许多用户和文件句柄的应用程序中使用该习惯用法,则可能会出现问题.

"首先,我们养成了习惯,然后才能养成我们." 即使没有必要,我也尝试应用最佳实践.



2> Jon Skeet..:

是的,当进程终止时,将释放非托管资源.对于InputStreams,这很好.对于OutputStreams,您可能会丢失缓冲数据,因此在退出程序之前至少应该刷新流.


那么当流对象超出范围(和垃圾收集)时呢?它会被关闭吗?
@Zippo:仅仅因为变量超出范围并不意味着该对象将被垃圾收集.垃圾收集是不确定的.一些流可能有一个终结器,它将冲洗它们 - 但依靠它,IMO是一个非常糟糕的主意.

3> Don Branson..:

多德.如果不关闭流,则单元测试将失败.或者至少,它应该.所以,这就是你需要关闭它的原因.;)

虽然如果你只是退出操作系统几乎肯定会清理,但如果你明确关闭它们,它们通常会更快地释放.如果你的代码最终会在一个长期运行的程序中结束,那该怎么办呢?然后他们会有问题并诅咒你.:(

所以,就像在洗手间后洗手一样.最终,如果你不这样做,有人会付出代价.你可以暂时使用它,但它仍然是一个很好的做法.


就个人而言,因为答案实际上没有任何技术内容 - 这本来是一个更好的评论.没有什么比说"这是一个好习惯"还要多得多,虽然我们经常接受这样的解释以便在我们的项目中获得权宜之计,但这对于Stack Overflow来说并不是一个好的答案.唐,没有任何个人罪行对你有意义; 我相信你知道你在谈论什么,但我更喜欢更多肉类的答案.
只是好奇,为什么这被否决?看起来像我的好答案虽然有趣:)
当然,我也知道.:)但也许评论者只是不明白答案是内容丰富和幽默.
我也不知道.对我来说这很有帮助.

4> Srikanth..:

除了Jon的回答,关闭任何资源通常都是个好主意.

想想数据库连接.您的数据库无法打开无限连接,在这种情况下,当您不需要它时,最好在完成后立即关闭它.

这也是一种习惯."终于"阻止是你的朋友.对于C++,您还可以使用RAII自动管理它.


Java 7实际上是java.io.AutoCloseable

5> Joao da Silv..:

有点.流由"真实"操作系统文件描述符支持,当进程终止时,操作系统将清理所有打开的文件描述符.

无论如何,当你完成时总是关闭你的资源是一个好习惯,所以关闭流:)



6> Philip Reyno..:

如果您不关闭流,则可能无法再次打开它们.如果他们挂在插座的末端,尤其如此.

关闭流还可确保在有任何数据要发送时通过流刷新数据.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有