dr *_*rry 43 java garbage-collection inputstream
简短的问题,
我在一些旧代码中看到a ByteArrayInputStream创建如下:
new BufferedReader(new InputStreamReader(new ByteArrayInputStream(somebytes)));
Run Code Online (Sandbox Code Playgroud)
然后BufferedReader用来somebytes逐行读出.
一切正常,但我注意到它BufferedReader永远不会关闭.
这一切都在长时间运行的websphere应用程序中运行,somebytes并不是很糟糕(最多200k),它每周只调用几次而且我们没有遇到任何明显的内存泄漏.所以我希望所有对象都能成功地进行垃圾回收.
我总是(曾经)在一个finally声明中了解到需要关闭输入/输出流.ByteStreams这个规则是例外吗?
亲切的问候Jeroen.
Tom*_*icz 44
您不必关闭ByteArrayInputStream,当它没有被任何变量引用时,垃圾收集器将释放流并且somebytes(当然假设它们未在其他地方引用).
但是,关闭每个流总是一个好习惯,事实上,创建流的实现可能会在未来发生变化,而不是原始字节,您将读取文件?此外,PMD或FindBugs等静态代码分析工具(请参阅注释)很可能会抱怨.
如果你厌倦了关闭流并被迫处理不可能IOException,你可以使用IOUtils:
IOUtils.closeQuietly(stream);
Run Code Online (Sandbox Code Playgroud)
关闭读者始终是一种好习惯.但是,不关闭ByteArrayInputStream不会产生潜在的负面影响,因为您没有访问文件,只是内存中的字节数组.
| 归档时间: |
|
| 查看次数: |
19858 次 |
| 最近记录: |