【问题标题】:Should I close the InputStream of org.apache.commons.io.IOUtils我应该关闭 org.apache.commons.io.IOUtils 的 InputStream
【发布时间】:2016-08-20 02:07:03
【问题描述】:

我正在使用How to convert InputStream to virtual File 上的答案,它使用org.apache.commons.io.IOUtils 将给定的InputStream 复制到FileOutputStream 以创建File

我应该关闭给定的InputStream 吗?

【问题讨论】:

  • 不需要像这样关闭输入流,我们明确必须关闭输出流,您可以关闭它,如果您愿意,您能提供您面临的问题吗?
  • 我没有遇到任何问题。我总是很难理解何时以及为什么应该关闭流。我看到了在不关闭 InputStream 的情况下将 InputStream 转换为虚拟文件的代码。所以我在想是否需要关闭它。
  • 经过重新考虑,我认为我们应该关闭它,因为它将包含指向我们文件的指针/句柄、读取文件内容的偏移量以及其他相关信息。如果我们关闭它,那么我们将释放资源,使程序高效。

标签: java inputstream apache-commons-io


【解决方案1】:

编辑:再次阅读问题后,我必须更正我的答案,因为问题显然是关于参考答案中的InputStream 而不是OutputStreamInputStream 需要关闭(请参阅@Adi 的答案)。 OutputStream 但是在 try-with-resources 声明中,所以你不需要关闭它。

问题中引用的答案是使用 Java 7 try-with-resources Statement,它确保资源在语句结束时关闭。

try-with-resources 语句是一个 try 语句,它声明一个 或更多资源。资源是必须在之后关闭的对象 该程序已完成。 try-with-resources 语句 确保每个资源在语句结束时关闭。

所以对于OutputStreamNO,在这种特殊情况下,您不需要自己关闭OutputStream,前提是您使用的是try-with-resource。

InputStream 但是需要关闭

【讨论】:

    【解决方案2】:

    最好关闭 InputStream。看到这个question

    org.apache.commons.io.IOUtils.copy 不关闭流。所以你必须关闭。

    Javadoc

    在可能的情况下,此类中的方法不会刷新或关闭 溪流。这是为了避免对 流的起源和进一步使用。因此调用者仍然有责任 用于在使用后关闭流。

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 2023-03-07
      • 2011-03-28
      • 2016-04-05
      • 2013-08-05
      • 2011-09-01
      • 2023-01-06
      • 1970-01-01
      相关资源
      最近更新 更多