ZipEntry.getSize返回-1的场景及未知未压缩大小Zip文件创建方法
关于ZipEntry.getSize()返回-1的问题
1. ZipFile是否会出现getSize()返回-1的情况
是的,ZipFile同样会遇到getSize()返回-1的场景。这个值是否有效完全取决于zip文件本身的条目元数据——如果创建zip时没有写入未压缩大小的字段,不管是用ZipInputStream读取还是ZipFile读取,都会返回-1。
2. 是否需要处理返回-1的情况
必须处理。存在合法的zip文件条目未记录未压缩大小,若代码直接依赖该值为有效正数,会引发逻辑错误或异常。
3. 如何创建此类zip文件用于测试
可以通过以下可控方式生成getSize()返回-1的zip条目:
- 使用Java代码手动构建:通过
ZipOutputStream添加条目时,不调用setSize()设置未压缩大小,直接写入内容。示例代码:
import java.io.FileOutputStream; import java.io.OutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class CreateTestZip { public static void main(String[] args) throws Exception { try (OutputStream os = new FileOutputStream("test.zip"); ZipOutputStream zos = new ZipOutputStream(os)) { ZipEntry entry = new ZipEntry("test.txt"); // 不设置未压缩大小 zos.putNextEntry(entry); zos.write("test content".getBytes()); zos.closeEntry(); } } }
内容的提问来源于stack exchange,提问作者hibbelig
相关产品推荐
相关产品推荐

