zlib,gzip和zip如何相关? 他们有什么共同点,他们有什么不同?

zlib中使用的压缩algorithm与gzipzip基本相同。 什么是gzipzip ? 它们有什么不同,它们又是怎样的?

简写:

.zip是一种使用Deflate压缩方法 的归档格式 。 .gz gzip格式适用于单个文件,也使用Deflate压缩方法。 通常gzip和tar结合使用来制作一个压缩的存档格式 ,即.tar.gz 。 zlib库提供了由zip,gzip, png (在deflate数据上使用zlib包装 )以及许多其他应用程序使用的Deflate压缩和解压缩代码。

长表:

ZIP格式是由Phil Katz开发的一种开放式格式,其实现方式是PKZIP,是共享软件。 这是一种档案格式,用于存储文件及其目录结构,每个文件都被单独压缩。 文件types是.zip 。 文件以及目录结构可以selectencryption。

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是相对较新的增加,并且在不同的less量使用中。 在ZIP格式中真正广泛使用的唯一方法是方法8, Deflate ,以及在一定程度上不存在压缩的方法0。 事实上,每个在野外遇到的.zip文件都将只使用方法8和0,可能只是方法8.(方法8也有一种方法可以有效地存储没有压缩和相对较小扩展的数据,方法0不能stream式而方法8可以)。

文件容器的ISO / IEC 21320-1:2015标准是一种受限制的zip格式,例如用于Java归档文件(.jar),Office Open XML文件(Microsoft Office .docx,.xlsx,.pptx),Office Document格式化文件(.odt,.ods,.odp)和EPUB文件(.epub)。 该标准将压缩方法限制为0和8,以及其他限制,例如不encryption或签名。

大约在1990年, Info-ZIP小组编写了zipunzip工具的可移植,免费,开放源码实现,支持Deflate格式的压缩以及该格式和较早格式的解压缩。 这极大地扩展了.zip格式的使用。

在90年代初期, gzip格式被开发为Unix compress工具的替代品,从Info-ZIP工具中的Deflate代码中得到。 Unix compress旨在压缩单个文件或stream,并将.Z添加到文件名中。 compress使用的LZW压缩algorithm ,当时是在专利和免费使用的专利持有人争议。 尽pipeDeflate的一些具体实现是由Phil Katz授予的专利,但是格式不是这样,所以可以编写一个Deflate实现,但不会侵犯任何专利。 这个实施在过去的20多年里并没有受到如此的挑战。 Unix gzip实用程序旨在作为compressreplace,实际上可以解compress数据(假设您能够parsing该语句)。 gzip.gz附加到文件名中。 gzip使用Deflate压缩数据格式,压缩比Unix compress好得多,具有非常快速的解压缩,并且添加了CRC-32作为数据的完整性检查。 标题格式还允许存储比允许的compress格式更多的信息,比如原始文件名和文件修改时间。

尽pipecompress只压缩单个文件,但通常使用tar实用程序将文件,属性和目录结构归档到一个.tar文件中,然后使用compress进行compress以生成.tar.Z文件。 事实上, tar工具已经可以同时进行压缩了,而不必将tar输出tarcompress 。 这一切都转向了gzip格式, tar可以直接压缩成.tar.gz格式。 tar.gz格式的压缩比.zip方法更好,因为.tar的压缩可以利用跨文件的冗余,尤其是许多小文件。 .tar.gz是Unix上最常用的归档格式,因为它具有很高的可移植性,但是还有更多有效的压缩方法在使用,因此您经常会看到.tar.bz2.tar.xz归档文件。

.tar不同, .zip在最后有一个中央目录,它提供了一个内容列表。 这和单独的压缩提供了一个.zip文件中的单个条目的随机访问。 一个.tar文件将不得不.tar进行解压缩和扫描,以build立一个目录,这是一个.tar文件的列表。

gzip推出后不久,大约在20世纪90年代中期,同样的专利纠纷引发了对免费使用.gif图像格式的质疑,在公告板和万维网(当时是一件新事物)上广泛使用。 因此,一个小组创build了PNG无损压缩的图像格式,文件types为.png ,以取代.gif 。 该格式还使用Deflate格式进行压缩,在图像数据上的滤镜显示更多冗余之后应用该格式。 为了促进PNG格式的广泛使用,创build了两个免费的代码库。 libpng和zlib 。 libpng处理了PNG格式的所有function,zlib提供了libpng使用的压缩和解压缩代码,以及其他应用程序。 zlib是从gzip代码改编的。

所有提及的专利已经过期。

zlib库支持Deflate压缩和解压缩,以及三种包围deflatestream的方式。 它们是:根本不包装(“原始”放气),在PNG格式数据块中使用的zlib包装和gzip包装,为程序员提供gzip例程。 zlib和gzip之间的主要区别在于zlib包装比较紧凑,6个字节,而gzip的最小值是18个字节,完整性检查,Adler-32,比gzip使用的CRC-32运行得更快。 原始deflate被读取和写入.zip格式的程序使用,这是另一种包裹deflate压缩数据的格式。

现在zlib广泛用于数据传输和存储。 例如,服务器和浏览器的大多数HTTP事务使用zlib压缩和解压缩数据。

deflate的不同实现可以导致对于相同的input数据不同的压缩输出,如可选的压缩级别的存在所certificate的那样,这允许对CPU时间进行压缩有效性的交换。 zlib和PKZIP不是压缩和解压缩的唯一实现。 7-Zip存档实用程序和Google的zopfli库都可以使用比zlib多得多的CPU时间,以便在使用deflate格式时尽可能缩小最后几位,与zlib的最高级别相比,可以减less几个百分点的压缩大小压缩级别。 Pigz实用程序是gzip的一个并行实现,它包括使用zlib(压缩级别1-9)或zopfli(压缩级别11)的选项,并且通过将大型文件的压缩分裂到多个处理器上来减less使用zopfli的时间影响和核心。

ZIP是一种文件格式,用于存储任意数量的文件和文件夹以及无损压缩。 对使用的压缩方法没有严格的假设,但是最经常使用DEFLATE 。

Gzip既是一个基于DEFLATE的压缩algorithm,也是较less的潜在专利等,还有一个存储单个压缩文件的文件格式。 它支持与tar结合时压缩任意数量的文件和文件夹。 生成的文件的扩展名为.tgz.tar.gz ,通常称为tarball

zlib是一个函数库,它封装了最常见的LZ77化身中的DEFLATE 。

最重要的区别是,gzip只能压缩一个文件,而zip压缩多个文件一个接一个,然后归档成一个单一的文件。 因此,gzip大部分时间都伴随着焦油(虽然还有其他的可能性)。 这伴随着一些(不)优点。
如果你有一个大档案,你只需要一个单一的文件,你必须解压缩整个gzip文件才能到达该文件。 如果您有一个zip文件,这不是必需的。
另一方面,如果你压缩10个类似的甚至相同的文件,压缩文件将会更大,因为每个文件都是单独压缩的,而在gzip和tar结合的情况下,单个文件是压缩的,如果文件是相似(相等)。