简短的问题,
我在一些旧代码中看到,ByteArrayInputStream是这样创建的:
new BufferedReader(new InputStreamReader(new ByteArrayInputStream(somebytes)));然后使用BufferedReader逐行读出somebytes。
一切正常,但我注意到BufferedReader从不关闭。
这都是在一个长时间运行的websphere应用程序中工作的,somebytes不是很大(最多200k),它一周只被调用几次,我们没有遇到任何明显的内存泄漏。所以我希望所有的对象都被成功地垃圾回收。
我总是(曾经)在finally语句中了解到需要关闭输入/输出流。ByteStreams是这条规则的例外吗?
亲切地问候Jeroen。
发布于 2011-02-25 22:15:53
关闭你的读者总是一个很好的做法。但是,不关闭ByteArrayInputStream不会有很大的潜在负面影响,因为您访问的不是文件,而只是内存中的字节数组。
发布于 2017-09-07 15:45:59
正如@TomaszNurkiewicz提到的,关闭打开的流总是很好的。让它自己做try代码块的另一个好方法。对资源使用try,如.......
try ( InputStream inputStream = new ByteArrayInputStream(bytes); Workbook workBook = new XSSFWorkbook(inputStream)) { 在这里,Workbook和InputStream都实现了Closeable接口,所以一旦try块完成(正常或突然),流肯定会被关闭。
发布于 2011-02-25 22:14:50
需要在finally (或等效物)中关闭资源。但是当你只有几个字节的时候,不,这并不重要。不过,在编写代码时,要小心在flush中使用happy。
https://stackoverflow.com/questions/5118204
复制相似问题