ZipOutputStream 类的 closeEntry()

Posted

技术标签:

【中文标题】ZipOutputStream 类的 closeEntry()【英文标题】:closeEntry() of Class ZipOutputStream 【发布时间】: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),但我想确定一下。

谢谢!!!

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于ZipOutputStream 类的 closeEntry()的主要内容,如果未能解决你的问题,请参考以下文章

在 ZipOutputStream.write() 方法中强化隐私违规

使用 ZipOutputStream 和 FileStream 压缩文件时出现异常

使用 Java ZipOutputStream 和 BufferedOutputStream 的首选方式

Java ??????ZipOutputStream ??????????????????

防止从 ZipOutPutStream 中删除重复项

[源码]ObjectIOStream 对象流 ByteArrayIOStream 数组流 内存流 ZipOutputStream 压缩流