【问题标题】:closeEntry() of Class ZipOutputStreamZipOutputStream 类的 closeEntry()
【发布时间】:2016-11-07 15:06:29
【问题描述】:

我正在使用 Java7 编写代码并使用 try-with-resources 功能。 当我创建 ZipOutputStream 的实例时。通过这样做,我不再需要关闭 finally 块中的流。 try-with-resources 管理(当然由 JVM)。
我的问题是 - closeEntry() 的使用怎么样。我应该在我的 try 块中编写这个方法,还是应该删除它,JVM 会通过 try-with-resources 功能自动关闭它,就像使用方法 close() 一样?

我几乎可以肯定它与 try-with-resources(或 finally 块)无关,我应该在我的 try 块中而不是在 finally 块中执行它(如果我使用常规的 try- catch-finally),但我想确定一下。

谢谢!!!

【问题讨论】:

    标签: java java-7 try-catch-finally try-with-resources zipoutputstream


    【解决方案1】:

    closeEntry() 的使用怎么样?我应该在我的 try 块中编写这个方法,还是应该删除它,JVM 会通过 try-with-resources 功能自动关闭它,就像使用方法 close() 一样?

    如果你想调用closeEntry(),那么你应该安排它被调用。当 try-with-resources 块退出时,它不会被自动调用——至少不会直接调用。也不应该,因为closeEntry()putNextEntry() 逻辑配对,并且输入try 块的主体不会导致调用putNextEntry()

    如果实际上一个条目在被调用时是打开的,那么流闭包可能会包含closeEntry() 的效果。然而,这并没有记录在案,因此最安全的做法是确实确保在最后一个条目之后调用closeEntry()。您也可以在条目之间调用它,但您不需要这样做,因为 putNextEntry() 已记录在开始新条目之前关闭任何打开的条目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多