You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:32:35