zlib 中使用的压缩算法本质上与 gzip 和 zip 中的相同。那么 gzip 和 zip 是什么?它们有何不同之处,又有何相同之处?
zlib 中使用的压缩算法本质上与 gzip 和 zip 中的相同。那么 gzip 和 zip 是什么?它们有何不同之处,又有何相同之处?
简短形式:
.zip
是一种通常使用{{link2:Deflate压缩方法的存档格式。.gz
gzip格式用于单个文件,也使用Deflate压缩方法。通常gzip与tar结合使用以创建压缩的存档格式,即.tar.gz
。zlib库提供了用于zip、gzip、png(使用zlib包装器处理deflate数据)和许多其他应用程序的Deflate压缩和解压缩代码。
长形式:
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
15 - Reserved by PKWARE
16 - IBM z/OS CMPSC Compression
17 - Reserved by PKWARE
18 - File is compressed using IBM TERSE (new)
19 - IBM LZ77 z Architecture
20 - deprecated (use method 93 for zstd)
93 - Zstandard (zstd) Compression
94 - MP3 Compression
95 - XZ Compression
96 - JPEG variant
97 - WavPack compressed data
98 - PPMd version I, Rev 1
99 - AE-x encryption marker (see APPENDIX E)
ISO/IEC 21320-1:2015标准文件容器是一种受限制的zip格式,例如在Java存档文件(.jar)、Office Open XML文件(Microsoft Office .docx、.xlsx、.pptx)、Office Document Format文件(.odt、.ods、.odp)和EPUB文件(.epub)中使用。该标准限制了压缩方法为0和8,以及其他约束,如无加密或签名。
大约在1990年,Info-ZIP团队编写了便携、免费、开源的zip
和unzip
实用程序的实现,支持使用Deflate格式进行压缩,以及对该格式和早期格式的解压缩。这极大地扩展了.zip
格式的使用。
compress
实用程序的替代品而开发出来,它是从Info-ZIP实用程序中的Deflate代码派生而来的。Unix compress
旨在压缩单个文件或流,并在文件名后附加一个.Z
。 compress
使用了当时正在受专利保护且其免费使用权受到专利持有人争议的LZW压缩算法。尽管Phil Katz对Deflate的某些具体实现进行了专利申请,但该格式并未受到专利保护,因此可以编写一种不侵犯任何专利的Deflate实现。在过去的20多年中,该实现从未受到挑战。Unix gzip
实用程序旨在成为compress
的即插即用替代品,实际上它能够解压缩compress
压缩的数据(假设您能够解析该句子)。gzip
在文件名后附加一个.gz
。 gzip
使用了Deflate压缩数据格式,相比Unix compress
,它的压缩效果更好,解压缩速度非常快,并添加了CRC-32作为数据的完整性检查。头部格式还允许存储比compress
格式更多的信息,例如原始文件名和文件修改时间。Content-Encoding: deflate
表示zlib数据格式内部包装的deflate压缩方法。最重要的区别是gzip只能压缩单个文件,而zip会逐个压缩多个文件并将它们存档到一个单一的文件中。 因此,gzip大多数情况下都需要与tar一起使用(虽然还有其他可能性)。这带来了一些优点和缺点。
如果您有一个大的归档文件,并且只需要其中一个文件,您必须解压整个gzip文件才能获取该文件。如果您有一个zip文件,则不需要这样做。
另一方面,如果您压缩10个相似或甚至相同的文件,zip归档文件会更大,因为每个文件都是单独压缩的,而在gzip与tar结合时,只压缩一个文件,如果文件相似(相等),则效果更好。
tar
的意思是“磁带归档”,而且(除非你在玩DECtape之类的东西)磁带本身就是顺序的! - RonJohn