为什么我不能刷新 ZipOutputStream?

问题描述

我正在尝试在 Java 中创建一个 zip 存档。 每次迭代都会向 ZipEntry 添加一些数据,我想在每次迭代后刷新内容(由于服务器重新启动处理)。

但是 ZipOutputStream flush() 不起作用。即内容不会推送到确切的文件。只有 close() 方法将所有数据推送到文件中。 知道为什么会发生这种情况吗?

我看到在压缩文件时刷新不起作用的地方。这是真的吗?以及如何克服它?

解决方法

如果您查看 structure of a zip archive,您会看到“中央目录”位于文件的末尾,即在您调用 close() 之前它不会被写入。>

调用 flush() 可能会强制将压缩的内容写入磁盘,但关键的“目录”信息尚未写入,因此无法刷新到磁盘。

ZIP-64 内部布局

image