ZipEntry.getSize() 返回压缩前原始大小(字节),由ZIP文件头“uncompressed size”字段决定;返回-1表示信息不可用,属合法状态,不触发解压,性能开销小。

ZipEntry.getSize() 返回的是该条目在压缩前的原始大小(即未压缩字节数),单位为字节。
如何正确获取压缩前大小
调用 ZipEntry.getSize() 即可直接获得原始大小。该值由 ZIP 文件头中存储的“uncompressed size”字段决定,与实际解压后内容一致。
- 如果返回值为
-1,表示该信息不可用(常见于使用流式写入且未预先计算大小的情况,或某些特殊压缩方式如 ZIP64 的部分场景) - 该方法不触发解压操作,纯读取元数据,性能开销极小
- 注意:不要与
getCompressedSize()混淆——后者返回压缩后的大小
常见误判情况
有时看到 getSize() 返回 -1,容易误以为是异常,其实属于合法状态:
- 使用
ZipOutputStream动态写入时未调用putNextEntry()前设置大小,或未关闭 entry,会导致读取时无法获取原始大小 - ZIP 文件损坏、或由不规范工具生成,可能缺失该字段
- 加密 ZIP 或某些分卷 ZIP 中,元数据可能受限
验证原始大小是否可靠
若需确保准确性,可在读取 ZIP 后手动解压并校验:
- 用
InputStream读取ZipEntry内容,统计实际字节数(适用于小文件) - 对比
getSize()与解压后File.length(),二者应相等(忽略换行符差异等特殊情况) - 对关键业务,建议优先依赖
getSize(),仅在返回-1时降级为流式读取计数

















