1

我正在用 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 ),但我想确定一下。

谢谢!!!

4

1 回答 1

1

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

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

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

于 2016-11-07T15:26:53.493 回答