zlib で使われている圧縮アルゴリズムは、基本的に gzip や zip と同じである。gzip と zip とは何ですか?それらはどのように違っていて、どのように同じですか?
短縮形:
.zip
はアーカイブ形式 で、通常は Deflate 圧縮方式 を使用する。 .gzgzip フォーマット][3] は単一のファイルのためのもので、同じく Deflate 圧縮法を用いる。 しばしば gzip は [tar と組み合わせて圧縮されたアーカイブ形式][4] である
.tar.gzとして使用される。 zlib ライブラリ][5] は、 zip, gzip, [png][6] (deflate データに [zlib ラッパー][7] を使用する) や他の多くのアプリケーションで使用する Deflate 圧縮と展開のコードを提供する。 長い形式:_ ZIPフォーマット][1]は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標準]8は、Javaアーカイブファイル(.jar)、Office Open XMLファイル(Microsoft Office .docx、.xlsx、.pptx)、Office Document Formatファイル(.odt、.ods、.odp)、EPUBファイル(.epub)で使用されるような、制限されたzip形式です。この規格では、圧縮方式を0と8に制限し、暗号化や署名を行わないなどの制約もある。
1990年頃、Info-ZIPグループがポータブルでフリーなオープンソースの zip
と unzip
ユーティリティの実装を書き、Deflateフォーマットによる圧縮と、それ以前のフォーマットの解凍をサポートした。 これは .zip
フォーマットの利用を大幅に拡大した。
90 年代初期に、gzip フォーマット は Unix compress
ユーティリティ を置き換えるものとして開発された。 Unix の compress
は単一のファイルやストリームを圧縮し、ファイル名に .Z
を付加するように設計されていた。 compressは[LZW圧縮アルゴリズム][11]を使用するが、当時は特許の下にあり、その自由な使用は特許所有者によって論争されていた。 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.gz
は移植性が非常に高いため、Unixで使用されている最も一般的なアーカイブ形式ですが、より効果的な圧縮方法もあるため、.tar.bz2
や.tar.xz
アーカイブもよく見かけます。
.tarとは異なり、
.zipは最後に中央のディレクトリがあり、中身のリストを提供する。これと個別の圧縮により、
.zipファイル内の各エントリへのランダムアクセスが可能になる。tar
ファイルはディレクトリを構築するために、最初から最後まで解凍してスキャンしなければならない。
gzipが導入された直後、1990年代半ば頃、同じ特許紛争によって、掲示板やワールドワイドウェブ(当時は新しいもの)で広く使われていた .gif
画像フォーマットの自由な使用が疑問視された。 そこで小さなグループは、.gif
に代わるファイルタイプ.png
のPNG可逆圧縮画像フォーマットを作成した。 このフォーマットも圧縮にDeflateフォーマットを使用しており、画像データのフィルタリングによって冗長性が露呈した後に適用される。 PNGフォーマットの普及を促進するために、2つのフリーコードライブラリが作成された。 libpngとzlibである。libpngはPNGフォーマットのすべての機能を扱い、zlibはlibpngで使用する圧縮と解凍のコード、および他のアプリケーションを提供する。
これらの特許はすべて失効しています。
zlib ライブラリは Deflate による圧縮と伸張をサポートしており、 Deflate ストリームを 3 種類の方法で折り返すことができます。 それらは、全くラッピングしないもの ("raw" deflate)、 zlib wrapping であり、これは PNG フォーマットのデータブロックで使用されます。 zlib と gzip のラッピングの主な違いは、 zlib のラッピングがよりコンパクトで、 gzip の最小 18 バイトに対して 6 バイトであることと、 完全性チェックの Adler-32 が gzip が使用する CRC-32 よりも高速に動作することです。 生の deflate は .zip
フォーマットを読み書きするプログラムによって使用される。
zlib は現在、データの伝送と保存に広く使われている。 例えば、サーバーやブラウザによるHTTPトランザクションのほとんどは、zlibを使ってデータを圧縮・解凍している。
zlibとPKZIPだけがdeflate圧縮と展開の実装ではない。7-Zipアーカイブユーティリティ]13とGoogle'のzopfliライブラリの両方は、deflateフォーマットを使用するときに可能な最後の数ビットを絞り出すために、zlibよりもはるかに多くのCPU時間を使用する能力を持っており、zlib'の最高圧縮レベルと比較して圧縮サイズを数パーセント削減します。gzip の並列実装である pigz ユーティリティ には、zlib (圧縮レベル 1-9) または zopfli (圧縮レベル 11) を使用するオプションがあり、大きなファイルの圧縮を複数のプロセッサとコアに分割することで、zopfli を使用することによる時間的な影響をいくらか緩和しています。
ZIPは、任意の数のファイルやフォルダを可逆圧縮で一緒に保存するために使われるファイルフォーマットです。使用される圧縮方法について厳密な仮定はないが、DEFLATEと共に最も頻繁に使用される。
Gzipは、DEFLATEをベースとした圧縮アルゴリズムであるが、潜在的な特許などに縛られることは少なく、単一の圧縮ファイルを保存するためのファイルフォーマットでもある。tar](https://en.wikipedia.org/wiki/Tar_(file_format)) と組み合わせることで、 任意の数のファイルとフォルダの圧縮をサポートする。できあがったファイルの拡張子は .tgz
または .tar.gz
で、一般に tarball と呼ばれる。
最も重要な違いは、gzipが単一のファイルだけを圧縮できるのに対し、zipは複数のファイルを1つずつ圧縮し、後で1つのファイルにアーカイブすることである。 したがって、gzip はほとんどの場合 tar と一緒に使われます (他の可能性もありますが)。これにはいくつかの(不)利点がある。
大きなアーカイブがあり、その中から1つのファイルだけが必要な場合、 そのファイルに到達するためにgzipファイル全体を解凍しなければならない。zipファイルならその必要はない。
一方、10個の同じような、あるいは同一のファイルを圧縮する場合、zip アーカイブは各ファイルが個別に圧縮されるため、はるかに大きくなります。一方、tar と組み合わせた gzip では、単一のファイルが圧縮されるため、ファイルが同じような (等しい) ものであれば、はるかに効果的です。