gpt4 book ai didi

java - 如何在 Java 中创建未压缩的 Zip 存档

转载 作者:IT老高 更新时间:2023-10-28 20:53:14 26 4
gpt4 key购买 nike

我正在使用 Java 的 Zip 实用程序包,想知道如何创建一个完全不压缩的 zip 文件。将级别设置为 0 无济于事。是这样吗?

另外,当我使用 STORED 方法时,它会抛出以下异常:

java.util.zip.ZipException: STORED entry missing size, compressed size, or crc-32

我可以设置大小,但现在抛出以下异常:

java.util.zip.ZipException: invalid entry crc-32 

我只是在网上搜索所有可用的示例,我猜我无法真正正确理解它。如果有人能在这方面帮助我并提供建议来纠正我可能正在做的问题,那就太好了。

最佳答案

我对 aperkins 解决方案持怀疑态度(已删除),但我知道它为什么有效。该行(此后已在他的回答中更正)

zipOut.setLevel(ZipOutputStream.STORED); // accidentally right

使用的是静态值 ZipOutputStream.STORED,恰好等于 0。因此,该行所做的是将默认 DEFLATED 方法使用的 level 设置为零压缩(这显然是您想要做的,但碰巧只能靠运气工作)。因此,要明确安全地获得您想要的东西,请改用它:

zipOut.setMethod(ZipOutputStream.DEFLATED); // this line optional
zipOut.setLevel(0);

zipOut.setLevel(Deflater.NO_COMPRESSION);

如果你使用

zipOut.setMethod(ZipOutputStream.STORED);
zipOut.setLevel(Deflater.NO_COMPRESSION);

您可能会得到 Keya 在原始问题中指出的异常。我相信 Christian Schlichtherle 是对的;您收到异常是因为您没有在条目中设置 CRC。这样做的后果是,要使用 STORED 方法,您必须先读取整个入口文件,或者在调用 zipOut 之前找到其他方法来设置大小、压缩大小(必须相等)和 CRC。 putNextEntry().否则,如果您通过向输出流写入过多字节来超出 size 属性,您将遇到更多异常。似乎 ZIP 规范说,如果您正在编写 STORED 数据,那么它必须在数据本身之前“预先”写入 header [包括 CRC-32 和长度],因此 java API 需要在它之前设置这些可以启动,因为它基本上只支持流到最终的zip文件。

关于java - 如何在 Java 中创建未压缩的 Zip 存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1206970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com