我使用ZipOutputStream创建ZIP文件。它运行正常,但Javadoc非常稀疏,所以我对ZipOutputStream的特性提出了疑问:
支持的最大文件大小是否有限制? ZIP中包含的文件和生成的ZIP文件本身? size
参数是long
,但是谁知道。 (我们假设文件系统没有限制。)
证明使用DEFLATED方法的最小输入文件大小是多少?
我将始终使用ZipInputStream读取生成的ZIP文件。
答案 0 :(得分:5)
最重要的方面是,在当前的Java-7 JDK中,ZipOutputStream
根据the 2012 PKZIP specification创建ZIP文件,其中还包括对ZIP64的支持。请注意,ZIP64具有had bugs at first功能,但任何最新版本的Java 7 JDK都可以。
因此,最大文件大小为 2 64 -1 bytes 。我尝试使用10 GB的测试文件。这比标准ZIP的4 GB大得多。我可以将它添加到ZIP文件中,没有任何问题,如果生成的ZIP文件本身超过4 GB。
证明使用DEFLATED方法的最小文件大小是 22字节。这与最小ZIP文件大小无关,顺便提一下也是22个字节(对于空ZIP文件)。我通过添加长度增加a
的字符串来经验地确定这个数字(见下图)。这样一系列相同的字符压缩得非常好,所以在现实世界中,盈亏平衡点会更高。
答案 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]