3

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

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

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

4

2 回答 2

4

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

ByteArrayInputStreamJavadoc说(部分),

关闭 aByteArrayOutputStream没有效果。

于 2014-11-27T19:42:39.160 回答
1

我知道关闭通常是一个好习惯 [...]

然后就做吧(tm):)

在其方法返回时,在此变量超出范围之前选择不关闭此输入流的后果是什么[?]

在 a 的情况下ByteArrayInputStream,没有后果;对于其他一些InputStream实现,泄漏,泄漏和更多泄漏。

长话短说:永远.close()安全,你永远不会输;在 Java 7+ 或早期版本中使用 try-with-resources 语句,最好使用Guava 的Closer.

于 2014-11-27T19:54:19.837 回答