向没有ZipInputStream的ZipOutStream添加ZipEntry时的java.util.zip.ZipException

向没有ZipInputStream的ZipOutStream添加ZipEntry时的java.util.zip.ZipException,java,byte,zipoutputstream,Java,Byte,Zipoutputstream,我试图将ZipEntry添加到ZipOutputStream中,但在尝试写入字节时遇到问题 我从一个将文件名映射到其ZipEntries的HashMap中获得了ZipEntries。我选择这种方法是因为我正在处理一个大的ZipInputStream,我希望能够访问它的内容,而不是通过InputStream循环查找文件并获取它的ZipEntry 在添加条目后尝试写入字节时,这会导致问题。到目前为止,我找到的所有解决方案都需要ZipInputStream 代码如下: ZipEntry ze = en

我试图将
ZipEntry
添加到
ZipOutputStream
中,但在尝试写入字节时遇到问题

我从一个将文件名映射到其
ZipEntries
HashMap
中获得了
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)

如何修复此异常?

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

那么有什么问题吗?此时需要编写文件…java.util.Zip.ZipException:无效的条目压缩大小(预期为389,但有12个字节)是我的错误。写文件是什么意思?你是说关闭ZipOutputStream?在此之前,我想添加更多内容。非常感谢您的快速回复!好吧,这是有道理的。我觉得我错过了一个大概念。