如何将zlib,gzip和zip相关联?它们有什么共同之处,它们有何不同?

时间:2013-12-24 13:48:50

标签: compression zip gzip zlib

zlib 中使用的压缩算法与 gzip zip 中的压缩算法基本相同。什么是 gzip zip ?它们有何不同,它们是如何相同的?

3 个答案:

答案 0 :(得分:2316)

简短形式:

.zip is an archive format通常使用Deflate compression method.gz gzip format用于单个文件,也使用Deflate压缩方法。 gzip通常与tar to make a compressed archive format.tar.gz结合使用。 zlib library提供了deflate压缩和解压缩代码,供zip,gzip,png(使用def {/ {}}上的zlib wrapper)和许多其他应用程序使用。

长篇:

ZIP format是由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 standard for file containers是受限制的zip格式,例如用于Java存档文件(.jar),Office Open XML文件(Microsoft Office .docx,.xlsx,.pptx),Office文档格式文件(。 odt,.ods,.odp)和EPUB文件(.epub)。该标准将压缩方法限制为0和8,以及其他约束,如无加密或签名。

1990年左右,Info-ZIP group编写了zipunzip实用程序的可移植,免费,开源实现,支持使用Deflate格式进行压缩,以及对该格式和早期格式进行解压缩。这极大地扩展了.zip格式的使用。

在90年代早期,gzip format被开发为Unix compress utility的替代品,来自Info-ZIP实用程序中的Deflate代码。 Unix compress旨在压缩单个文件或流,将.Z附加到文件名。 compress使用LZW compression algorithm,当时该专利正在申请专利,其免费使用受到专利持有人的争议。虽然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之后不久,大约在1990年代中期,同样的专利纠纷质疑免费使用.gif图像格式,广泛用于公告板和全球Web(当时是一件新事物)。因此,一个小组创建了PNG无损压缩图像格式,文件类型为.png,以替换.gif。该格式还使用Deflate格式进行压缩,这是在图像数据上的过滤器暴露更多冗余之后应用的。为了促进PNG格式的广泛使用,创建了两个免费的代码库。 libpngzlib。 libpng处理了PNG格式的所有功能,zlib提供了压缩和解压缩代码供libpng以及其他应用程序使用。 zlib改编自gzip代码。

所有提到的专利都已过期。

zlib库支持Deflate压缩和解压缩,以及围绕deflate流的三种包装。它们是:根本不包装("原始" deflate),zlib wrapping,用于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 archiving utility和Google的zopfli library都可以使用比zlib多得多的CPU时间,以便在使用deflate格式时挤出最后几位,从而减少压缩大小与zlib的最高压缩级别相比,百分之几。 pigz utility是gzip的并行实现,包括使用zlib(压缩级别1-9)或zopfli(压缩级别11)的选项,并通过拆分大文件的压缩来稍微减轻使用zopfli的时间影响多个处理器和核心。

答案 1 :(得分:40)

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

Gzip既是基于DEFLATE的压缩算法,又是对潜在专利等的较少阻碍,以及用于存储单个压缩文件的文件格式。它支持在与tar结合使用时压缩任意数量的文件和文件夹。生成的文件的扩展名为.tgz.tar.gz,通常称为 tarball

zlib是一个函数库,它将DEFLATE封装在最常见的LZ77版本中。

答案 2 :(得分:25)

最重要的区别是,gzip只能压缩单个文件,而zip会逐个压缩多个文件,然后将它们归档到一个文件中。 因此,gzip大部分时间都伴随着tar(尽管还有其他可能性)。这伴随着一些(dis)优势。

如果您有一个大型存档而且只需要一个单独的文件,则必须解压缩整个gzip文件以获取该文件。如果你有一个zip文件,这不是必需的。

另一方面,如果你压缩10个类似甚至相同的文件,那么zip存档会更大,因为每个文件都是单独压缩的,而在gzip中结合tar,压缩单个文件会更有效。文件类似(相同)。