zlib、gzip、zipはどのように関連していますか?彼らには何が共通していて、どのように違うのですか?


948

zlibで使用される圧縮アルゴリズムは、基本的にgzipおよびzipと同じです。gzipzipとは何ですか?それらはどのように異なり、どのように同じですか?

回答:


2476

ショートフォーム:

.zip通常、Deflate圧縮方式を使用するアーカイブ形式です.gzgzipフォーマットはまた、deflate圧縮方式を使用して、単一ファイルのためのものです。多くの場合、gzipで組み合わせて使用されている圧縮されたアーカイブ形式を作るためにタール.tar.gzzlibライブラリは、 deflate圧縮と解凍ZIP、GZIP、で使用するためのコードを提供PNG(使用ZLIBラッパー DEFLATEデータ上を)、および他の多くのアプリケーション。

長い形式:

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標準は、Javaアーカイブファイル(.jar)、Office Open XMLファイル(Microsoft Office .docx、.xlsx、.pptx)、Officeドキュメントなどで使用される制限付きzip形式です。フォーマットファイル(.odt、.ods、.odp)、およびEPUBファイル(.epub)。この規格では、圧縮方法が0と8に制限されているだけでなく、暗号化や署名がないなどの他の制約も制限されています。

Info-ZIPグループは1990年頃に、ポータブルで無料のオープンソースのzipunzipユーティリティの実装を作成し、Deflate形式での圧縮と、それ以前の形式の圧縮解除をサポートしました。これにより、.zipフォーマットの使用が大幅に拡大しました。

90年代初頭、gzip形式は、Info-ZIPユーティリティのDeflateコードから派生したUnix compressユーティリティの代わりとして開発されました。Unix compressは、単一のファイルまたはストリームを圧縮.Zし、ファイル名にを追加するように設計されています。 compressLZW圧縮アルゴリズムを使用しています。これは、当時は特許を取得していたものであり、その自由な使用は特許権者の間で争われていました。Deflateのいくつかの特定の実装はPhil Katzによって特許が取得されましたが、形式はそうではなかったため、特許を侵害しないDeflate実装を作成することが可能でした。この実装は、過去20年以上の間それほど挑戦されていません。Unix 、そして実際には解凍することができますgzipユーティリティは、ドロップインの代替として意図されていましたcompresscompress-圧縮データ(その文を解析できたと想定)。 ファイル名にgzipa .gzを追加します。 gzipDeflate圧縮データ形式を使用します。これcompressは、Unixよりもかなり圧縮されており、非常に高速に解凍され、データの整合性チェックとしてCRC-32が追加されます。ヘッダー形式でcompressは、元のファイル名やファイルの変更時刻など、許可されている形式よりも多くの情報を保存できます。

けれどもcompress、単一のファイルを圧縮し、それを使用するのが一般的だったtar単一のファイルに、その属性、およびそのディレクトリ構造のアーカイブを作成するためのユーティリティを.tarファイルし、その後でそれを圧縮するためにcompress作成する.tar.Zファイルを。実際にはtarユーティリティが持っていたし、今でも代わりにパイプを持つの出力を、同時に圧縮を行うためのオプションがあるtarのをcompress。これはすべてgzip形式に引き継がtarれ、.tar.gz形式に直接圧縮するオプションがあります。aの圧縮は、ファイル全体、特に多くの小さなファイルの冗長性を利用できるため、このtar.gz形式は.zipアプローチよりも圧縮率が高くなり.tarます。 .tar.gz移植性が非常に高いため、Unixで使用されている最も一般的なアーカイブ形式ですが、より効果的な圧縮方法も使用されているため、頻繁に表示.tar.bz2および.tar.xzアーカイブされます。

とは異なり.tar、に.zipは最後に中央ディレクトリがあり、コンテンツのリストを提供します。これと個別の圧縮により、.zipファイル内の個々のエントリにランダムにアクセスできます。.tarファイルが解凍され、どのようにあるディレクトリ、構築するために最初から最後までスキャンしなければならない.tarファイルが表示されます。

gzipの導入直後、1990年代中頃に、同じ特許紛争により、.gif掲示板やWorld Wide Web(当時は新しいもの)で非常に広く使用されている画像フォーマットの自由な使用が問われました。そこで、小さなグループが、PNGロスレス圧縮画像フォーマットを作成し、ファイルタイプ.pngを置き換えて、に置き換えました.gif。この形式では、圧縮にDeflate形式も使用されます。これは、画像データのフィルターが冗長性をさらに露出した後に適用されます。PNG形式の普及を促進するために、2つの無料コードライブラリが作成されました。 libpngおよびzlib。libpngはPNG形式のすべての機能を処理し、zlibはlibpngおよび他のアプリケーションで使用するための圧縮および解凍コードを提供しました。zlibはgzipコードから改作されました。

上記の特許はすべて失効しています。

zlibライブラリは、Deflate圧縮と解凍、およびdeflateストリームの3種類のラップをサポートしています。それらは次のとおりです。まったくラッピングなし( "raw" deflate)、PNG形式のデータブロックで使用されるzlibラッピング、およびプログラマーにgzipルーチンを提供するためのgzipラッピング。zlibのラッピングとgzipのラッピングの主な違いは、zlibのラッピングがよりコンパクトであり、gzipの最小バイトが6バイトであるのに対し、6バイトであり、整合性チェックのAdler-32は、gzipが使用するCRC-32よりも高速に実行されることです。Raw deflateは、.zipフォーマットを読み書きするプログラムで使用されます。これは、deflate圧縮データをラップする別のフォーマットです。

zlibは現在、データの送信と保存に広く使用されています。たとえば、サーバーとブラウザによるほとんどのHTTPトランザクションは、zlibを使用してデータを圧縮および解凍します。具体的には、HTTPヘッダーContent-Encoding: deflate、zlibデータ形式内にラップされたdeflate圧縮方法を意味します

CPU時間の圧縮効果をトレードオフできる選択可能な圧縮レベルの存在によって証明されるように、deflateの実装が異なると、同じ入力データに対して異なる圧縮出力が生じる可能性があります。zlibとPKZIPは、deflate圧縮と解凍の唯一の実装ではありません。7-ZipアーカイブユーティリティとGoogleのzopfliライブラリはどちらも、deflate形式を使用するときに可能な最後の数ビットを絞り出すために、zlibよりもはるかに多くのCPU時間を使用して、圧縮サイズをzlibの最高のものと比較して数パーセント削減できます。圧縮レベル。pigzユーティリティは、gzipの並列実装であり、zlib(圧縮レベル1〜9)またはzopfli(圧縮レベル11)を使用するオプションが含まれており、複数のプロセッサおよびコアで大きなファイルの圧縮を分割することにより、zopfliの使用による時間への影響を多少軽減します。


113
この投稿にはたくさんの歴史と情報が詰め込まれているので、人々がこの投稿を情報源として参照しようとする場合に備えて、いくつかの引用を追加する必要があると思います。この情報がウィキペディアのような引用でどこかに反映されている場合でも、そのような同様の引用された研究へのリンクがいただければ幸いです。
ThorSummoner、2015年

1348
私はそのすべての一部であった参照です。この投稿は、ウィキペディアで元のソースとして引用される可能性があります。
Mark Adler

524
参考までに:マークアドラーはアメリカのソフトウェアエンジニアであり、宇宙探査に深く関わってきました。彼は、Adler-32チェックサム関数の作成者、およびzlib圧縮ライブラリとgzipの共著者として、データ圧縮の分野での彼の仕事で最もよく知られています。彼はInfo-ZIPに貢献し、Portable Network Graphics(PNG)画像フォーマットの開発に参加しています。アドラーはまた、火星探査ローバーミッションのスピリットクルーズミッションマネージャーでもありました。(ウィキペディア)
Isaac Hanson

99
Unix圧縮を置き換えるためにgzipが作成されました。いくつかの理由で、zipはUnixでtar + gzipより優れていません。(.tar.gzファイルを見ると、それが何であるかです。)最初に、次のファイルの圧縮では前のファイル(「ソリッド」アーカイブと呼ばれることもあります)の履歴を使用できるため、tar + gzipはzipよりも圧縮率が高くなります。zipで圧縮できるのはファイルのみです。次に、tarはすべてのUnixディレクトリ情報を保持しますが、zipはそのように設計されていません。(Unix固有の追加ブロックを含むzip形式の拡張機能は、この問題を解決しようとします。)
Mark Adler

85
あなたはフォーマットを実装と混同しているようです。deflate形式の7-Zip 実装は、同じdeflate形式を使用したgzipよりも2%から10%高い圧縮率を実現できます(ただし、CPU時間を大幅に消費します)。7z LZMA2 フォーマットは、約40%優れた圧縮を提供します。
マークアドラー

43

ZIPは、任意の数のファイルとフォルダーを可逆圧縮で保存するために使用されるファイル形式です。使用される圧縮方法について厳密な仮定はありませんが、最も頻繁にDEFLATEで使用されます。

Gzipは、DEFLATEに基づく圧縮アルゴリズムですが、潜在的な特許などに煩わされることはなく、単一の圧縮ファイルを保存するためのファイル形式でもあります。tarと組み合わせると、任意の数のファイルとフォルダの圧縮をサポートします。結果のファイルは、拡張子が.tgzまたはで.tar.gz、一般にtarballと呼ばれます。

zlibは、最も一般的なLZ77インカネーションでDEFLATEをカプセル化する関数のライブラリです。


28

最も重要な違いは、gzipは単一のファイルのみを圧縮できることですが、zipは複数のファイルを1つずつ圧縮し、後でそれらを単一のファイルにアーカイブします。したがって、ほとんどの場合、gzipはtarに付属しています(ただし、他の可能性もあります)。これにはいくつかの(欠点)利点があります。

大きなアーカイブがあり、そこから1つのファイルのみが必要な場合は、gzipファイル全体を解凍して、そのファイルを取得する必要があります。zipファイルがある場合、これは必要ありません。

一方、10個の類似または同一のファイルを圧縮すると、各ファイルが個別に圧縮されるため、zipアーカイブははるかに大きくなりますが、gzipとtarを組み合わせた場合、単一のファイルが圧縮されます。似ています(等しい)。


8
あなたは要点を過大評価しています。ランダムアクセスの圧縮アーカイブが必要な場合は、「。tar.gz」ファイルの代わりに「.gz.tar」ファイルを作成できます。ほとんどの人はランダムアクセスに興味がないので、彼らはそうしません。.warc.gz Webアーカイブ形式を取り巻く大きなコミュニティがあり、ランダムアクセスが必要なので、各Webページを個別に圧縮します。この形式は、インターネットアーカイブウェイバックマシンでWebページを表示するたびに使用します。
グレッグリンダール2016年

2
「.gz.tar」は、tar形式がエントリにランダムにアクセスできないため、ランダムアクセスを提供しません。同じファイルが複数の場所で(複数のバージョンで)何度もアーカイブされる可能性があるため、必要な特定のエントリを取得するには、最初からすべてのエントリを通過する必要があります。さらに悪いことに、最後まですべてのエントリを通過する必要があります同じアーカイブ内-そして、エントリごとにアーカイブ全体を読み取る以外に、それを理解する手段はありません。
Min-Soo Pipefeet 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.