zlib中使用的压缩算法与gzip和zip中的压缩算法基本相同。什么是gzip和zip?它们有何不同,又有何不同?
zlib中使用的压缩算法与gzip和zip中的压缩算法基本相同。什么是gzip和zip?它们有何不同,又有何不同?
Answers:
简写:
.zip
是一种存档格式,通常使用Deflate压缩方法。的.gz
gzip格式为单个文件,也使用deflate压缩方法。通常的gzip在结合使用焦油进行压缩存档格式,.tar.gz
。的zlib库提供了通过拉链,gzip的,使用DEFLATE压缩和解压缩代码PNG(它使用的zlib包装上放气的数据),和许多其它应用。
长表:
该ZIP格式是由菲尔·卡茨开发与开放的规范,他的执行,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)格式化文件(.odt,.ods,.odp)和EPUB文件(.epub)。该标准将压缩方法限制为0和8,以及其他限制,例如没有加密或签名。
在1990年左右,Info-ZIP组编写了可移植的,免费的,开源的实用程序zip
和unzip
实用程序,支持使用Deflate格式进行压缩以及对该格式和早期格式进行解压缩。这极大地扩展了.zip
格式的使用。
在90年代初期,gzip格式被开发为Unix compress
实用程序的替代,它是从Info-ZIP实用程序中的Deflate代码衍生而来的。Unix compress
旨在压缩单个文件或流,.Z
并在文件名后附加a 。 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
文件中列出。
在1990年中期左右引入gzip之后不久,同一宗专利纠纷就引发了人们对免费使用.gif
图片格式的质疑,该图片格式在公告板上和万维网上使用非常广泛(当时是新事物)。因此,一个小组创建了PNG无损压缩图像格式(文件类型为.png
)来替换.gif
。该格式还使用Deflate格式进行压缩,该格式是在图像数据的过滤器公开更多冗余之后应用的。为了促进PNG格式的广泛使用,创建了两个免费代码库。 libpng和zlib。libpng处理了PNG格式的所有功能,而zlib提供了压缩和解压缩代码,供libpng和其他应用程序使用。zlib是从gzip
代码改编而成的。
此后所有提及的专利均已过期。
zlib库支持Deflate压缩和解压缩,以及围绕deflate流的三种包装。它们是:完全不包装(“原始”放气),用于PNG格式数据块的zlib包装和gzip包装,为程序员提供gzip例程。zlib包装和gzip包装之间的主要区别在于zlib包装更加紧凑,只有6个字节,而gzip的包装最少为18个字节,而完整性检查Adler-32的运行速度比gzip使用的CRC-32要快。原始deflate由读取和写入该.zip
格式的程序使用,该格式是另一种围绕deflate压缩数据的格式。
zlib现在广泛用于数据传输和存储。例如,服务器和浏览器进行的大多数HTTP事务都使用zlib压缩和解压缩数据,特别是HTTP标头Content-Encoding: deflate
意味着压缩封装在zlib数据格式内的压缩方法。
放气的不同实现方式可能导致相同输入数据的不同压缩输出,这由可选压缩级别的存在证明,这些压缩级别允许在CPU时间上权衡压缩效率。zlib和PKZIP并不是deflate压缩和解压缩的唯一实现。无论是7-ZIP归档工具和谷歌的zopfli库必须使用deflate格式时,为了挤掉可能最后几位用更多的CPU时间比zlib的能力,百分之几减少压缩尺寸相比zlib的最高压缩级别。该pigz工具,是gzip的并行实现,包括使用zlib(压缩级别1-9)或zopfli(压缩级别11)的选项,并且通过在多个处理器和内核上拆分大型文件的压缩,在某种程度上减轻了使用zopfli的时间影响。
.tar.gz
文件时,就是这样。)首先,tar + gzip的压缩比zip更好,因为下一个文件的压缩可以使用上一个文件的历史记录(有时称为“可靠”存档)。zip只能单独压缩文件。其次,tar保留所有Unix目录信息,而zip并非旨在做到这一点。(后来使用特定于Unix的额外块对zip格式进行了扩展,试图解决此问题。)
ZIP是一种文件格式,用于存储任意数量的文件和文件夹以及无损压缩。它对使用的压缩方法没有严格的假设,但是最常与DEFLATE一起使用。
Gzip既是基于DEFLATE的压缩算法,又受潜在专利等的困扰,它既是一种文件格式,用于存储单个压缩文件。与tar结合使用时,它支持压缩任意数量的文件和文件夹。生成的文件扩展名为.tgz
或.tar.gz
,通常称为tarball。
最重要的区别是,gzip仅能压缩单个文件,而zip则可以一个接一个地压缩多个文件,然后将它们归档到一个文件中。因此,gzip大多数时候都与tar一起出现(不过还有其他可能性)。这伴随着一些(不利)优势。
如果存档很大,而只需要一个文件,则必须解压缩整个gzip文件才能找到该文件。如果您有zip文件,则不需要这样做。
另一方面,如果您压缩10个相似甚至相同的文件,则zip存档会更大,因为每个文件都是单独压缩的,而在与tar结合使用gzip的情况下,单个文件将被压缩,如果文件被压缩,则效率会更高。类似(相等)。