zlibで使用される圧縮アルゴリズムは、基本的にgzipおよびzipと同じです。gzipとzipとは何ですか?それらはどのように異なり、どのように同じですか?
zlibで使用される圧縮アルゴリズムは、基本的にgzipおよびzipと同じです。gzipとzipとは何ですか?それらはどのように異なり、どのように同じですか?
回答:
ショートフォーム:
.zip
は通常、Deflate圧縮方式を使用するアーカイブ形式です。.gz
gzipフォーマットはまた、deflate圧縮方式を使用して、単一ファイルのためのものです。多くの場合、gzipで組み合わせて使用されている圧縮されたアーカイブ形式を作るためにタール、.tar.gz
。zlibライブラリは、 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年頃に、ポータブルで無料のオープンソースのzip
とunzip
ユーティリティの実装を作成し、Deflate形式での圧縮と、それ以前の形式の圧縮解除をサポートしました。これにより、.zip
フォーマットの使用が大幅に拡大しました。
90年代初頭、gzip形式は、Info-ZIPユーティリティのDeflateコードから派生したUnix compress
ユーティリティの代わりとして開発されました。Unix compress
は、単一のファイルまたはストリームを圧縮.Z
し、ファイル名にを追加するように設計されています。 compress
はLZW圧縮アルゴリズムを使用しています。これは、当時は特許を取得していたものであり、その自由な使用は特許権者の間で争われていました。Deflateのいくつかの特定の実装はPhil Katzによって特許が取得されましたが、形式はそうではなかったため、特許を侵害しないDeflate実装を作成することが可能でした。この実装は、過去20年以上の間それほど挑戦されていません。Unix 、そして実際には解凍することができますgzip
ユーティリティは、ドロップインの代替として意図されていましたcompress
compress
-圧縮データ(その文を解析できたと想定)。 ファイル名にgzip
a .gz
を追加します。 gzip
Deflate圧縮データ形式を使用します。これ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の使用による時間への影響を多少軽減します。
.tar.gz
ファイルを見ると、それが何であるかです。)最初に、次のファイルの圧縮では前のファイル(「ソリッド」アーカイブと呼ばれることもあります)の履歴を使用できるため、tar + gzipはzipよりも圧縮率が高くなります。zipで圧縮できるのはファイルのみです。次に、tarはすべてのUnixディレクトリ情報を保持しますが、zipはそのように設計されていません。(Unix固有の追加ブロックを含むzip形式の拡張機能は、この問題を解決しようとします。)
最も重要な違いは、gzipは単一のファイルのみを圧縮できることですが、zipは複数のファイルを1つずつ圧縮し、後でそれらを単一のファイルにアーカイブします。したがって、ほとんどの場合、gzipはtarに付属しています(ただし、他の可能性もあります)。これにはいくつかの(欠点)利点があります。
大きなアーカイブがあり、そこから1つのファイルのみが必要な場合は、gzipファイル全体を解凍して、そのファイルを取得する必要があります。zipファイルがある場合、これは必要ありません。
一方、10個の類似または同一のファイルを圧縮すると、各ファイルが個別に圧縮されるため、zipアーカイブははるかに大きくなりますが、gzipとtarを組み合わせた場合、単一のファイルが圧縮されます。似ています(等しい)。