1. ホーム
  2. compression

[解決済み】zlib、gzip、zipはどのように関係していますか?これらの共通点と相違点は何ですか?

2022-03-23 19:52:03

質問

で使用されている圧縮アルゴリズムは? zlib とは基本的に同じです。 ジージップ ジップ . とは何ですか? gzip ジップ ? どのように違って、どのように同じなのですか?

解決方法は?

短い文章です。

.zip はアーカイブ形式 を使用して、通常は Deflate圧縮方式 . その .gz gzip形式 は単一ファイル用で、Deflate圧縮方式も使用します。 多くの場合、gzipは以下のものと組み合わせて使われます。 tar で圧縮アーカイブ形式 , .tar.gz . その zlib ライブラリ は、zip や gzip で使用する Deflate 圧縮および解凍コードを提供します。 png (これは zlib ラッパー を使用したもの)、その他多くのアプリケーションがあります。

長文です。

ZIP形式 は、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
   15 - Reserved by PKWARE
   16 - IBM z/OS CMPSC Compression
   17 - Reserved by PKWARE
   18 - File is compressed using IBM TERSE (new)
   19 - IBM LZ77 z Architecture 
   20 - deprecated (use method 93 for zstd)
   93 - Zstandard (zstd) Compression 
   94 - MP3 Compression 
   95 - XZ Compression 
   96 - JPEG variant
   97 - WavPack compressed data
   98 - PPMd version I, Rev 1
   99 - 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標準規格 は、Javaアーカイブファイル(.jar)、Office Open XMLファイル(Microsoft Office .docx, .xlsx, .pptx)、Office Document Formatファイル(.odt, .ods, .odp)、EPUBファイル(.epub)などで使用する制限付きのZIP形式です。その規格では、圧縮方式を0と8に限定し、暗号化や署名の禁止など他の制約もある。

1990年頃 Info-ZIPグループ のポータブルでフリーなオープンソースの実装を書きました。 zipunzip ユーティリティで、Deflate 形式での圧縮と、それ以前の形式の解凍をサポートしています。 これによって .zip というフォーマットがあります。

90年代前半には gzip形式 に代わるものとして開発されました。 ユニックス compress ユーティリティ Info-ZIPユーティリティのDeflateコードから派生したものです。 Unix compress は1つのファイルまたはストリームを圧縮するために設計されており、そのために .Z をファイル名に追加します。 compress LZW圧縮アルゴリズム この特許は当時、特許権者によって自由に使えるかどうかが争われていました。 Deflateのいくつかの特定の実装はPhil Katzによって特許を取得されていましたが、フォーマットはそうではなかったので、どの特許も侵害しないDeflate実装を書くことが可能でした。 その実装は、この20年以上、それほど問題視されていません。 Unixの gzip ユーティリティは compress を解凍することができ、実際に compress -圧縮されたデータです(この文章を解析できたと仮定して)。 gzip を追加します。 .gz をファイル名に追加します。 gzip はDeflate圧縮データ形式を使用しており、Unixの compress また、データの整合性チェックとしてCRC-32を付加しています。 また,ヘッダー形式は compress の形式を使用することができ、元のファイル名やファイルの変更時間などが含まれます。

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

とは異なり .tar , .zip は、最後に中央のディレクトリがあり、そこで内容のリストを提供します。これと、個別の圧縮により、個々のエントリへのランダムアクセスが可能な .zip ファイルです。A .tar ファイルは、ディレクトリを構築するために解凍され、最初から最後までスキャンされる必要があります。 .tar ファイルがリストアップされます。

gzip が導入された直後、1990 年代半ばごろ、同じ特許紛争によって、gzip の自由な使用は疑問視されました。 .gif 掲示板やWWW(当時はまだ新しかった)で広く使われていた画像フォーマットです。 そこで、ある小さなグループがPNGという可逆圧縮の画像フォーマットを作り、ファイルタイプは .png を置き換えるために .gif . また、この形式はDeflate形式を圧縮に使用しており、画像データにフィルタをかけて冗長性を多くした後に適用される。 PNG形式の普及のために、2つのフリーコードライブラリーが作られた。 libpng zlib libpng は PNG フォーマットのすべての機能を処理し、 zlib は libpng や他のアプリケーションで使用する圧縮・解凍コードを提供します。 gzip というコードがあります。

記載された特許はすべて期限切れとなっています。

zlib ライブラリは Deflate 圧縮および解凍と、Deflate ストリームの 3 種類のラッピングをサポートしています。 それらは次のとおりです: ラッピングなし ("raw" deflate), zlib ラッピング そして、プログラマに gzip ルーチンを提供するための gzip ラッピングです。 zlib と gzip のラッピングの主な違いは、zlib のラッピングは gzip の最低 18 バイトに対して 6 バイトとよりコンパクトで、完全性チェックの Adler-32 は gzip が使う CRC-32 より速く実行されることです。 生の deflate は .zip これは、デフレート圧縮されたデータをラップする別のフォーマットである。

zlib は現在、データの伝送や保存に広く使用されています。 例えば、サーバやブラウザによるほとんどの HTTP トランザクションは、zlib を使ってデータを圧縮・解凍しています。具体的には、HTTP ヘッダー Content-Encoding: deflate というのは zlibデータ形式の中に包まれたdeflate圧縮方式 .

zlib と PKZIP は、deflate の圧縮と展開の唯一の実装ではありません。zlib と PKZIP の両方が 7-Zip アーカイブユーティリティ とGoogleの zopfli ライブラリ は、deflate 形式を使用する際に可能な限り最後の数ビットを絞り出すために zlib よりもはるかに多くの CPU 時間を使用する能力を持ち、zlib の最高圧縮レベルと比較して圧縮サイズを数パーセント削減します。その ピッグスユーティリティ gzip の並列実装である zlib (圧縮レベル 1-9) と zopfli (圧縮レベル 11) を使用するオプションを含み、 大きなファイルの圧縮を複数のプロセッサとコアに分割することによって zopfli を使用した場合の時間の影響を多少緩和しています。