是否需要关闭从本地String变量的字节构建的Java ByteArrayInputStream?

时间:2014-11-27 19:41:13

标签: java inputstream bytearrayinputstream

假设我正在构造一个本地String变量的Java ByteArrayInputStream。例如,假设我有一个名为csv的大型String表示CSV文件的内容,我需要将其放入输入流中,以便从该字符串中读取我的程序的一个组件,而不是来自一个文件。例如,

InputStream inputStream = new ByteArrayInputStream(csv.​getBytes(StandardCharsets.UTF_8));

在完成处理后,是否需要关闭此inputStream?我知道通常通过try-resources构造关闭未使用的输入流通常是一种好习惯。我现在特别感兴趣的是在该方法返回时,在此变量超出范围之前选择不关闭此输入流会产生什么后果。因为我离开了会不会有内存泄漏一条小溪开放?或者它无关紧要,因为流是在本地变量而不是在文件资源上打开的?

2 个答案:

答案 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