简写:
.zip
是一种归档格式 ,通常使用Deflate 压缩方法 。 .gz
gzip 格式适用于单个文件,也使用 Deflate 压缩方法。 gzip 通常与tar结合使用,以生成压缩的归档格式 .tar.gz
。 zlib 库提供了 Deflate 压缩和解压缩代码,供 zip,gzip, png (使用 defl 数据上的zlib 包装器 )和许多其他应用程序使用。
长表:
ZIP 格式是由 Phil Katz 开发的一种开放格式,具有开放式规范,其实现 PKZIP 是共享软件。它是一种存档格式,用于存储文件及其目录结构,其中每个文件都是单独压缩的。文件类型是.zip
。可以选择加密文件以及目录结构。
ZIP 格式支持多种压缩方法:
0 - The file is stored (no compression)
1 - The file is Shrunk
2 - The file is Reduced with compression factor 1
3 - The file is Reduced with compression factor 2
4 - The file is Reduced with compression factor 3
5 - The file is Reduced with compression factor 4
6 - The file is Imploded
7 - Reserved for Tokenizing compression algorithm
8 - The file is Deflated
9 - Enhanced Deflating using Deflate64(tm)
10 - PKWARE Data Compression Library Imploding (old IBM TERSE)
11 - Reserved by PKWARE
12 - File is compressed using BZIP2 algorithm
13 - Reserved by PKWARE
14 - LZMA (EFS)
15 - Reserved by PKWARE
16 - Reserved by PKWARE
17 - Reserved by PKWARE
18 - File is compressed using IBM TERSE (new)
19 - IBM LZ77 z Architecture (PFS)
97 - WavPack compressed data
98 - PPMd version I, Rev 1
方法 1 至 7 是历史的并且未使用。方法 9 至 98 是相对较新的添加物,并且具有不同的少量使用。在 ZIP 格式中真正广泛使用的唯一方法是方法 8, Deflate ,以及一些较小范围的方法 0,它根本不压缩。实际上,您将在野外遇到的每个.zip
文件都将使用方法 8 和 0,可能只是方法 8.(方法 8 也有一种方法可以有效地存储数据而不进行压缩和相对较少的扩展,而方法 0 不能流式传输,而方法 8 可以。)
文件容器的ISO / IEC 21320-1:2015 标准是受限制的 zip 格式,例如用于 Java 归档文件(.jar),Office Open XML 文件(Microsoft Office .docx,.xlsx,.pptx),Office 文档格式化文件(.odt,.ods,.odp)和 EPUB 文件(.epub)。该标准将压缩方法限制为 0 和 8,以及其他约束,如无加密或签名。
1990 年左右, Info-ZIP 小组编写了zip
和unzip
实用程序的可移植,免费,开源实现,支持 Deflate 格式的压缩,以及对早期格式的解压缩。这极大地扩展了.zip
格式的使用。
在 90 年代早期, gzip 格式被开发为Unix compress
实用程序的替代品,它源自 Info-ZIP 实用程序中的 Deflate 代码。 Unix compress
旨在压缩单个文件或流,将.Z
附加到文件名。 compress
使用LZW 压缩算法 ,该算法当时属于专利,其免费使用受到专利持有人的争议。虽然 Deflate 的某些特定实现是由 Phil Katz 申请专利的,但格式不是,所以有可能编写一个不侵犯任何专利的 Deflate 实现。在过去的 20 多年里,这种实施并未受到如此严峻的挑战。 Unix gzip
实用程序旨在作为compress
替代品,实际上能够解compress
数据(假设您能够解析该句子)。 gzip
将.gz
附加到文件名。 gzip
使用 Deflate 压缩数据格式,压缩比 Unix compress
更好,具有非常快速的解压缩,并添加 CRC-32 作为数据的完整性检查。标头格式还允许存储比允许的compress
格式更多的信息,例如原始文件名和文件修改时间。
虽然compress
仅压缩单个文件,这是通常使用的tar
实用程序创建的文件,它们的属性,以及它们的目录结构的归档到一个单一.tar
文件,并然后用它压缩compress
做出.tar.Z
档。事实上, tar
实用程序已经并且仍然可以选择同时进行压缩,而不必管道tar
的输出进行compress
。这一切都转移到 gzip 格式, tar
有一个选项可以直接压缩到.tar.gz
格式。 tar.gz
格式比.zip
方法压缩得更好,因为.tar
的压缩可以利用文件之间的冗余,特别是许多小文件。 .tar.gz
是 Unix 上最常用的归档格式,因为它具有很高的可移植性,但是还有更有效的压缩方法,所以你经常会看到.tar.bz2
和.tar.xz
档案。
与.tar
不同, .zip
在末尾有一个中心目录,它提供了一个内容列表。这和单独的压缩提供了对.zip
文件中各个条目的随机访问。必须对.tar
文件进行解压缩并从头到尾进行扫描才能构建目录,这就是.tar
文件的列出方式。
在引入 gzip 之后不久,大约在 20 世纪 90 年代中期,同样的专利纠纷质疑.gif
图像格式的自由使用,广泛用于公告板和万维网(当时是一种新事物)。因此,一个小组创建了 PNG 无损压缩图像格式,文件类型为.png
,以替换.gif
。该格式还使用 Deflate 格式进行压缩,这是在图像数据上的过滤器暴露更多冗余之后应用的。为了促进 PNG 格式的广泛使用,创建了两个免费的代码库。 libpng和zlib 。 libpng 处理了 PNG 格式的所有功能,zlib 提供了压缩和解压缩代码供 libpng 以及其他应用程序使用。 zlib 改编自gzip
代码。
所有提到的专利都已过期。
zlib 库支持 Deflate 压缩和解压缩,以及围绕 deflate 流的三种包装。它们是:根本没有包装(“原始”deflate), zlib 包装 (用于 PNG 格式数据块)和 gzip 包装,为程序员提供 gzip 例程。 zlib 和 gzip 包装的主要区别在于 zlib 包装更紧凑,6 个字节,而 gzip 最少 18 个字节,完整性检查 Adler-32 运行速度比 gzip 使用的 CRC-32 快。原始 deflate 由读取和写入.zip
格式的程序使用,这是另一种包装缩小压缩数据的格式。
zlib 现在广泛用于数据传输和存储。例如,服务器和浏览器的大多数 HTTP 事务使用 zlib 压缩和解压缩数据。
deflate 的不同实现可以导致相同输入数据的不同压缩输出,如可选择的压缩级别的存在所证明的,其允许折衷 CPU 时间的压缩有效性。 zlib 和 PKZIP 并不是 deflate 压缩和解压缩的唯一实现。 7-Zip 归档实用程序和 Google 的zopfli 库都能够比 zlib 使用更多的 CPU 时间,以便在使用 deflate 格式时挤出最后几位,与 zlib 相比,压缩大小减少了几个百分点压缩等级。 pigz 实用程序是 gzip 的并行实现,包括使用 zlib(压缩级别 1-9)或 zopfli(压缩级别 11)的选项,并通过在多个处理器上拆分大文件的压缩来稍微减轻使用 zopfli 的时间影响和核心。
最重要的区别是 gzip 只能压缩单个文件,而 zip 会逐个压缩多个文件,然后将它们归档到一个文件中。因此,gzip 大部分时间都伴随着 tar(尽管还有其他可能性)。这伴随着一些(dis)优势。
如果你有一个大的存档而你只需要一个单独的文件,你必须解压缩整个 gzip 文件才能获得该文件。如果您有 zip 文件,则不需要这样做。
另一方面,如果你压缩 10 个相似或甚至相同的文件,zip 存档将会更大,因为每个文件都是单独压缩的,而在 gzip 中与 tar 结合使用时会压缩单个文件,如果文件是相似的(相等的)。