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

谢谢!!!

最佳答案

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


如果要调用closeEntry(),则应安排调用它。退出try-with-resources块时,不会自动调用它-至少不是直接退出。对于closeEntry()在逻辑上与putNextEntry()配对的情况也不应该,并且输入try块的主体不会导致putNextEntry()被调用。

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

10-05 18:28