假设我正在构造一个本地String变量的Java ByteArrayInputStream
。例如,假设我有一个名为csv
的大型String表示CSV文件的内容,我需要将其放入输入流中,以便从该字符串中读取我的程序的一个组件,而不是来自一个文件。例如,
InputStream inputStream = new ByteArrayInputStream(csv.getBytes(StandardCharsets.UTF_8));
在完成处理后,是否需要关闭此inputStream?我知道通常通过try-resources构造关闭未使用的输入流通常是一种好习惯。我现在特别感兴趣的是在该方法返回时,在此变量超出范围之前选择不关闭此输入流会产生什么后果。因为我离开了会不会有内存泄漏一条小溪开放?或者它无关紧要,因为流是在本地变量而不是在文件资源上打开的?
答案 0 :(得分:4)
没有。您无需关闭ByteArrayInputStream
。因为它在内存中,所以没有后果(它会被垃圾收集)。现在,如果InputStream
与外部资源(如File
)相关联,可能会导致文件句柄用尽。
ByteArrayInputStream
Javadoc说(部分),
关闭
ByteArrayOutputStream
无效。
答案 1 :(得分:1)
我知道关闭[...]
通常是一个好习惯
然后Just Do It(tm):)
当该变量超出范围时,如果其方法返回[?]
,选择不关闭此输入流会产生什么后果?
在ByteArrayInputStream
的情况下,没有后果;对于其他一些InputStream
实现,泄漏,泄漏和更多泄漏。
长话短说:总是.close()
安全,你永远不会失去;使用Java 7+中的try-with-resources语句或早期版本,最好使用Guava's Closer
。