我正在使用ZipOutputStream创建 ZIP 文件。它工作得很好,但 Javadoc 非常稀疏,所以我对 ZipOutputStream 的特性有疑问:
支持的最大文件大小是否有限制?对于 ZIP 中包含的文件和生成的 ZIP 文件本身?
size
争论是,long
但谁知道呢。(让我们假设文件系统没有限制。)证明使用 DEFLATED 方法的最小输入文件大小是多少?
我将始终使用ZipInputStream读取生成的 ZIP 文件。
我正在使用ZipOutputStream创建 ZIP 文件。它工作得很好,但 Javadoc 非常稀疏,所以我对 ZipOutputStream 的特性有疑问:
支持的最大文件大小是否有限制?对于 ZIP 中包含的文件和生成的 ZIP 文件本身?size
争论是,long
但谁知道呢。(让我们假设文件系统没有限制。)
证明使用 DEFLATED 方法的最小输入文件大小是多少?
我将始终使用ZipInputStream读取生成的 ZIP 文件。
最重要的方面是在当前的 Java-7 JDK 中,ZipOutputStream
根据2012 PKZIP 规范创建 ZIP 文件,其中还包括对 ZIP64 的支持。请注意,ZIP64 功能最初有错误,但任何最新版本的 Java 7 JDK 都可以。
因此最大文件大小为2 64 -1 字节。我尝试了一个 10 GB 的测试文件。这比 4 GB 的标准 ZIP 大得多。如果生成的 ZIP 文件本身超过 4 GB,我也可以毫无问题地将其添加到 ZIP 文件中。
证明使用 DEFLATED 方法的最小文件大小是22 字节。这与最小的 ZIP 文件大小无关,顺便说一下,它也是 22 字节(对于空的 ZIP 文件)。我通过添加长度增加的 s 字符串凭经验确定了这个数字a
(见下图)。这样一串相同的字符压缩得很好,所以在现实世界中,盈亏平衡点会更高。
以下是 ZIP 文件格式的限制:
.ZIP 文件的最小大小为 22 个字节。对于标准 .ZIP,存档文件和其中的单个文件的最大大小为 4,294,967,295 字节(232-1 字节,或 4 GiB 减去 1 字节),以及 18,446,744,073,709,551,615 字节(264-1 字节,或 16 EiB 减去 1 字节) ) 用于 ZIP64。[31]
参考:Zip(文件格式)