0

我正在尝试将 a 添加ZipEntry到 aZipOutputStream但在尝试写入字节时遇到问题。

ZipEntryHashMap将文件名映射到它们的ZipEntries. 我选择这种方法是因为我正在处理一个大文件ZipInputStream,并且我希望能够比遍历InputStream并查找文件并获取其ZipEntry.

当我在添加条目后尝试写入字节时,这会导致问题。到目前为止,我发现的所有解决方案都需要ZipInputStream.

这是代码:

ZipEntry ze = entryHash.get(pathToString(path));
zos.putNextEntry(ze);
zos.write(new byte[(int)ze.getSize()]); // Problem Here
zos.closeEntry();

我得到的错误是:

java.util.zip.ZipException: invalid entry compressed size (expected 389 but got 12 bytes)
    at java.util.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:248)

我该如何解决这个异常?

4

1 回答 1

1

您需要创建一个的ZipEntry 以添加到 ZipOutputStream。但是你的代码没有任何意义。您不会使用这种技术将旧的 ZipEntry 复制到输出,您只是在编写一个相同大小的零字节数组。您必须从旧的 ZipEntry 读取并写入新的输出。您的 ZipEntries 地图技术也行不通。必须按顺序处理 Zip 文件。

于 2014-01-31T21:26:49.813 回答