java - 我需要关闭 ByteArrayInputStream 吗?

标签 java garbage-collection inputstream

小问题,

我在一些旧代码中看到 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/

相关文章:

java - 如何从设备文件夹中检索和共享位图

java - 将变量传递到 SQL 语句中以选择特定记录

java - Spring-Boot:使用 Redis 作为 Session Store 时出现异常

swift - 值的名称存储在哪里?我怎样才能查看它?

actionscript-3 - (AS3) 将变量设置为 private 是否有助于垃圾回收?

android - 将激光测距仪 (Bosch Disto GLM 50 C) 与智能手机 (Android Studio) 连接

java - 这条Ant路径有什么问题吗?

java - 自定义比较字符串方法抛出索引数组越界

java - 如何使用objdump反汇编OpenJDK(bin/java)?

java - 以文件形式访问 Java 资源