【问题标题】:Do I need to close an InputStream in Java?我需要在 Java 中关闭 InputStream 吗?
【发布时间】:2012-03-21 19:33:27
【问题描述】:

我的代码是:

InputStream confFile=classLoader.getResourceAsStream("myconffile.properties");

在文档中:

InputStream 的 close 方法什么都不做。

是否意味着我不需要关闭 InputStream?

【问题讨论】:

    标签: java inputstream


    【解决方案1】:

    您确实需要关闭输入流,因为您提到的方法返回的流实际上是FileInputStreamInputStream 的其他一些子类,其中包含文件句柄。如果您不关闭此流,则存在资源泄漏。

    【讨论】:

    • 我认为在大多数情况下它不会是 FileInputStream。
    • 我应该对此进行调查,遗憾的是我目前手头没有任何 java 实例。但是,我同意你的观点,它持有一个文件句柄。
    • finalize() 方法不会为你关闭资源流吗?
    • @Ryan Amos:是的 - 何时以及是否运行。这可以是任意长时间之后,足够你用完文件句柄的时间。或者删除或重命名操作失败。实际发生在我身上的事情(不是资源流):我想修改图像文件的 EXIF 元数据。这涉及使用更新肉食创建文件的副本,然后删除原始文件并将副本重命名为原始文件的名称。不幸的是,EXIF 操作库没有关闭原始文件上的输入流,导致删除失败(大部分时间)。
    • @MichaelBorgwardt 你是对的,在我的实验中似乎是ByteArrayInputStream
    【解决方案2】:

    不,这并不意味着 - 因为InputStream 是一个抽象类,而getResourceAsStream() 返回一个具体的子类,它的close() 方法做了一些事情——最重要的是释放一个文件句柄。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-01
      • 2013-01-10
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      • 2011-08-12
      相关资源
      最近更新 更多