小问题,
我在一些旧代码中看到 ByteArrayInputStream
是这样创建的:
new BufferedReader(new InputStreamReader(new ByteArrayInputStream(somebytes)));
然后使用BufferedReader
逐行读出somebytes
。
一切正常,但我注意到 BufferedReader
从未关闭。
这一切都在一个长期运行的 websphere 应用程序中运行,somebytes
并不可怕(最多 200k),它每周只调用几次,我们没有遇到任何明显的内存泄漏。所以我希望所有的对象都能成功地被垃圾回收。
我总是(曾经)在 finally
语句中了解到需要关闭输入/输出流。 ByteStreams
是这条规则的异常(exception)吗?
亲切的问候 杰罗恩。
最佳答案
你不必关闭ByteArrayInputStream
,当它没有被任何变量引用时,垃圾收集器将释放流和somebytes
(当然假设它们是'未在其他地方引用)。
然而关闭每个流总是一个好习惯,事实上,创建流的实现可能会在未来发生变化,而不是原始字节,您将读取文件?此外,PMD 或 FindBugs(见评论)等静态代码分析工具很可能会提示。
如果你厌倦了关闭流并被迫处理不可能的IOException
,你可以使用IOUtils :
IOUtils.closeQuietly(stream);
关于java - 我需要关闭 ByteArrayInputStream 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5118204/