zlib、gzip和zip有什么关系?它们有什么共同点?它们有什么不同?

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

420074 次浏览

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

Gzip既是一种基于DEFLATE的压缩算法,但较少受到潜在专利等人的影响,也是一种用于存储单个压缩文件的文件格式。当与焦油组合时,它支持压缩任意数量的文件和文件夹。生成的文件扩展名为.tgz.tar.gz,通常称为tarball

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

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

如果您有一个大的存档并且您只需要其中的一个文件,您必须解压整个gzip文件才能访问该文件。如果您有一个zip文件,则不需要这一点。

另一方面,如果您压缩10个相似甚至相同的文件,zip存档将大得多,因为每个文件都是单独压缩的,而在gzip与tar结合使用时,压缩单个文件,如果文件相似(相等),则会更有效。

简称:

#0是存档格式通常使用放气压缩法#1 gzip格式用于单个文件,也使用Deflate压缩方法。通常gzip与tar来制作压缩的存档格式.tar.gz结合使用。zlib库提供Deflate压缩和解压缩代码,供zip、gzip、png(在放气数据上使用zlib包装器)和许多其他应用程序使用。

长形式:

zip格式由Phil Katz开发为具有开放规范的开放格式,他的实现PKZIP是共享软件。它是一种存储文件及其目录结构的存档格式,其中每个文件都被单独压缩。文件类型为.zip。文件以及目录结构可以选择加密。

ZIP格式支持多种压缩方法:

    0 - The file is stored (no compression)1 - The file is Shrunk2 - The file is Reduced with compression factor 13 - The file is Reduced with compression factor 24 - The file is Reduced with compression factor 35 - The file is Reduced with compression factor 46 - The file is Imploded7 - Reserved for Tokenizing compression algorithm8 - The file is Deflated9 - Enhanced Deflating using Deflate64(tm)10 - PKWARE Data Compression Library Imploding (old IBM TERSE)11 - Reserved by PKWARE12 - File is compressed using BZIP2 algorithm13 - Reserved by PKWARE14 - LZMA15 - Reserved by PKWARE16 - IBM z/OS CMPSC Compression17 - Reserved by PKWARE18 - File is compressed using IBM TERSE (new)19 - IBM LZ77 z Architecture20 - deprecated (use method 93 for zstd)93 - Zstandard (zstd) Compression94 - MP3 Compression95 - XZ Compression96 - JPEG variant97 - WavPack compressed data98 - PPMd version I, Rev 199 - AE-x encryption marker (see APPENDIX E)

方法1到7是历史上的方法,目前还没有使用。方法9到98是最近添加的方法,使用的次数不同,数量也不多。在ZIP格式中真正广泛使用的唯一方法是方法8、放气,在一定程度上还有方法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组编写了zipunzip实用程序的可移植、免费、开源实现,支持Deflate格式的压缩,以及该格式和早期格式的解压缩。这极大地扩展了.zip格式的使用。

在90年代早期,compress2是作为compress3的替代品而开发的,它源自Info-ZIP实用程序中的Deflate代码。Unixcompress旨在压缩单个文件或流,并在文件名后附加.Zcompress使用compress4,当时它处于专利之下,其免费使用受到专利持有者的争议。尽管Phil Katz为Deflate的一些特定实现申请了专利,但格式不是,因此有可能编写不侵犯任何专利的Deflate实现。在过去的20多年中,这种实现没有受到如此大的挑战。Unixgzip实用程序旨在作为compress的直接替代品,实际上能够解压compress压缩的数据(假设您能够解析该句子)。gzip.gz附加到文件名。gzip使用Deflate压缩数据格式,它的压缩比Unixcompress好得多,解压速度非常快,并添加了CRC-32作为数据的完整性检查。标头格式还允许存储比compress格式允许的更多信息,例如原始文件名和文件修改时间。

虽然compress只压缩单个文件,但通常使用tar实用程序将文件、它们的属性和目录结构创建一个存档到一个.tar文件中,然后用compress压缩它以生成.tar.Z文件。事实上,tar实用程序曾经并且仍然可以选择同时进行压缩,而不必将tar的输出管道到compress。这一切都延续到gzip格式,tar可以选择直接压缩到.tar.gz格式。tar0格式的压缩比tar1方法更好,因为.tar的压缩可以利用文件之间的冗余,特别是许多小文件。.tar.gz是Unix上使用的最常见的存档格式,因为它具有非常高的可移植性,但也有更有效的压缩方法在使用,所以你会经常看到tar4和tar5存档。

.tar不同,.zip在末尾有一个中央目录,它提供了一个内容列表。这和单独的压缩提供了对.zip文件中各个条目的随机访问。一个.tar文件必须被解压缩并从头到尾扫描才能构建一个目录,这就是.tar文件的列出方式。

大约在20世纪90年代中期,gzip问世后不久,同样的专利纠纷让.gif图像格式的免费使用受到质疑。.gif图像格式在公告牌和万维网上得到了广泛使用(这在当时还是个新生事物)。因此,一小群人创建了文件类型为.png的PNG无损压缩图像格式来取代.gif。该格式还使用Deflate格式进行压缩,在图像数据上的过滤器暴露更多冗余后应用。为了促进PNG格式的广泛使用,创建了两个免费代码库。libpngzlib。libpng处理PNG格式的所有功能,zlib提供压缩和解压缩代码供libpng使用,以及其他应用程序。zlib改编自gzip代码。

上述所有专利均已过期。

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

zlib现在广泛用于数据传输和存储。例如,服务器和浏览器的大多数HTTP事务使用zlib压缩和解压缩数据,特别是HTTP标头Content-Encoding: deflate表示包装在zlib数据格式中的压缩方法

zlib和PKZIP不是唯一的压缩和解压缩的实现,7-Zip归档实用程序和Google的zopfli图书馆都有能力使用比zlib更多的CPU时间,以便在使用压缩格式时挤出最后几个可能的位,与zlib的最高压缩级别相比,压缩大小减少了几个百分点。皮茨实用程序是gzip的并行实现,包括使用zlib(压缩级别1-9)或zopfli(压缩级别11)的选项,并通过在多个处理器和内核上拆分大文件的压缩来减轻使用zopfli的时间影响。