【问题标题】:Does a Java ByteArrayInputStream built off of bytes from a local String variable need to be closed?是否需要关闭由本地 String 变量中的字节构建的 Java ByteArrayInputStream?
【发布时间】:2015-01-26 11:17:40
【问题描述】:

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

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

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

【问题讨论】:

    标签: java inputstream bytearrayinputstream


    【解决方案1】:

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

    那就去做吧 (tm) :)

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

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

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

    【讨论】:

      【解决方案2】:

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

      ByteArrayInputStream Javadoc 说(部分),

      关闭ByteArrayOutputStream 无效。

      【讨论】:

        猜你喜欢
        • 2013-11-27
        • 2021-08-04
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-20
        • 2019-04-21
        相关资源
        最近更新 更多