首页 文章

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

提问于
浏览
831

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

3 回答

  • 2209

    简写:

    .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(使用zlib wrapper on deflate数据)和许多其他应用程序使用 .

    长表:

    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 图像的免费使用格式,广泛用于公告板和万维网(当时的新事物) . 因此,一个小组创建了PNG无损压缩图像格式,文件类型为 .png ,以替换 .gif . 该格式还使用Deflate格式进行压缩,这是在图像数据上的过滤器暴露更多冗余之后应用的 . 为了促进PNG格式的广泛使用,创建了两个免费的代码库 . libpngzlib . libpng处理了PNG格式的所有功能,zlib提供了压缩和解压缩代码供libpng以及其他应用程序使用 . zlib改编自 gzip 代码 .

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

    zlib库支持Deflate压缩和解压缩,以及围绕deflate流的三种包装 . 它们是:根本没有包装("raw" deflate),zlib wrapping,用于PNG格式数据块,以及gzip包装,为程序员提供gzip例程 . zlib和gzip包装的主要区别在于zlib包装更紧凑,六个字节,而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的时间影响 . 核心 .

  • 39

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

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

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

  • 25

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

    如果你有一个大的存档而你只需要一个单独的文件,你必须解压缩整个gzip文件才能获得该文件 . 如果您有zip文件,则不需要这样做 .

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

相关问题