ZipOutputStream的文件大小限制?

时间:2013-08-17 12:01:23

标签: java stream compression zip

我使用ZipOutputStream创建ZIP文件。它运行正常,但Javadoc非常稀疏,所以我对ZipOutputStream的特性提出了疑问:

  1. 支持的最大文件大小是否有限制? ZIP中包含的文件和生成的ZIP文件本身? size参数是long,但是谁知道。 (我们假设文件系统没有限制。)

  2. 证明使用DEFLATED方法的最小输入文件大小是多少?

  3. 我将始终使用ZipInputStream读取生成的ZIP文件。

2 个答案:

答案 0 :(得分:5)

最重要的方面是,在当前的Java-7 JDK中,ZipOutputStream根据the 2012 PKZIP specification创建ZIP文件,其中还包括对ZIP64的支持。请注意,ZIP64具有had bugs at first功能,但任何最新版本的Java 7 JDK都可以。

  1. 因此,最大文件大小为 2 64 -1 bytes 。我尝试使用10 GB的测试文件。这比标准ZIP的4 GB大得多。我可以将它添加到ZIP文件中,没有任何问题,如果生成的ZIP文件本身超过4 GB。

  2. 证明使用DEFLATED方法的最小文件大小是 22字节。这与最小ZIP文件大小无关,顺便提一下也是22个字节(对于空ZIP文件)。我通过添加长度增加a的字符串来经验地确定这个数字(见下图)。这样一系列相同的字符压缩得非常好,所以在现实世界中,盈亏平衡点会更高。

  3. Deflated vs. Stored

答案 1 :(得分:4)

以下是ZIP文件格式的限制:

  

.ZIP文件的最小大小为22个字节。两者的最大尺寸   存档文件及其中的各个文件是4,294,967,295   标准.ZIP的字节(232-1字节,或4 GiB减1字节),和   18,446,744,073,709,551,615字节(264-1字节,或16 EiB减1字节)   对于ZIP64。[31]

参考:Zip (file format)