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

标签 java inputstream bytearrayinputstream

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

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

在我完成处理后是否需要关闭此 inputStream?我知道通常通过 try-resources 构造关闭未使用的输入流通常是一种很好的做法。我现在特别感兴趣的是如果在方法返回时此变量超出范围之前选择不关闭此输入流会产生什么后果。会不会有内存泄漏,因为我离开了一个流打开?还是因为流是在局部变量而不是文件资源上打开的,所以这无关紧要?

最佳答案

没有。您不需要关闭 ByteArrayInputStream。因为它在内存中,所以不会有任何后果(它将被垃圾收集)。现在,如果 InputStream 与外部资源(如 File)相关联,这可能会导致您用完文件句柄。

ByteArrayInputStream Javadoc说(部分),

Closing a ByteArrayOutputStream has no effect.

关于java - 是否需要关闭由本地 String 变量的字节构建的 Java ByteArrayInputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27177775/

相关文章:

java - 无法处理 AsyncTask 调用的方法中的异常

java - 监听多个输入流?

java - 从 getInputStream 正确关闭 Java Process InputStream

java - 来自 ByteArrayInputStream 的 Camel 路由

java - 从不同的项目调用不同的包

Java Stack.peek() 到对象

android - 如何将 ByteArrayInputStream 转换为 jpeg 并在 android 手机上显示?

java - 如何正确地将Blob对象转换为ByteArrayInputStream对象?

java - Java 中字符串和 HTML 的比较

java - 来自 URL 的 InputStream