我是否需要关闭 ByteArrayInputStream?

2022-08-31 19:36:33

简短的问题,

我在一些旧代码中看到过一个被创建如下:ByteArrayInputStream

new BufferedReader(new InputStreamReader(new ByteArrayInputStream(somebytes)));

然后用于逐行读出。
一切都很好,但我注意到从来没有关闭过。
这一切都在长时间运行的Websphere应用程序中工作,并不可怕(大多数是200k),它每周只被调用几次,我们没有遇到任何明显的内存泄漏。因此,我希望所有对象都已成功回收垃圾。BufferedReadersomebytesBufferedReadersomebytes

我总是(一次)在语句中了解到输入/输出流需要关闭。此规则是例外吗?finallyByteStreams

亲切的问候耶罗恩。


答案 1

您不必关闭 ,当它没有被任何变量引用时,垃圾回收器将释放流并(当然假设它们没有在其他地方引用)。ByteArrayInputStreamsomebytes

但是,关闭每个流始终是一种很好的做法,实际上,也许创建流的实现将来会发生变化,而不是原始字节,您将读取文件?此外,像PMD或FindBugs这样的静态代码分析工具(见评论)很可能会抱怨。

如果您厌倦了关闭流并被迫处理不可能,则可以使用IOUtilsIOException

IOUtils.closeQuietly(stream);

答案 2

关闭读者总是很好的做法。但是,不关闭 ByteArrayInputStream 不会产生如此沉重的潜在负面影响,因为您访问的不是文件,只是内存中的字节数组。