【问题标题】: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() 已记录在开始新条目之前关闭任何打开的条目。