DeflateをGZIPに変換
生DEFLATEをGZIPストリームに変換することで、オペレーティングシステムやWebツールが適切に読み取れるように、圧縮ペイロードをメタデータヘッダー付きの標準コンテナ内にラップします。
フォーマットの比較と技術仕様
| 仕様 | DEFLATE | GZIP |
|---|---|---|
| MIMEタイプ | application/ | application/ |
| タイプ | raw DEFLATEストリーム | DEFLATEストリームコンテナ |
| 圧縮 | LZ77 + ハフマン符号 | DEFLATE(RFC 1951) |
| 標準仕様 | IETF RFC 1950 / RFC 1951 | IETF RFC 1952 |
| マジックバイトヘッダー | 78 01 / 78 9C / 78 DA (zlib header bytes) | 1F 8B (gzip ID1/ID2) |
フォーマットの概要と用途
生のDEFLATEデータストリームには、ファイルヘッダーや末尾のチェックサムなしで圧縮されたバイトが含まれています。Webブラウザやネットワークツールは、元のファイル名、変更タイムスタンプ、オペレーティングシステム識別子などのメタデータが不足しているため、これらのプレーンなストリームの処理に苦労することがよくあります。この生データをGZIPコンテナ内にラップすることで、これらの互換性の問題が解決されます。 開発者は、HTTP圧縮、PNG画像チャンク、ZIPアーカイブなどのネットワークプロトコル内で生のDEFLATEストリームに遭遇します。これらのストリームをコマンドラインツールや標準的なWebダウンロード用のスタンドアロンファイルとして保存する必要がある場合、エンジニアはそれらをGZIP形式に変換します。これにより、展開ユーティリティがファイルタイプを即座に認識し、エラーを発生させることなくコンテンツを抽出できるようになります。
技術仕様とコーデックの詳細
生のDEFLATEはRFC 1951のビットストリームで、フレーミングヘッダーや固定シグネチャを持たず、LZ77マッチングとハフマン符号を使用します。MIMEタイプ application/zlib が示すのはRFC 1950のzlibラッパー付きDEFLATEであり、生のDEFLATEではありません。GZIP(application/gzip)はDEFLATEペイロードをラップし、バイト 1F 8B で始まるヘッダーと、CRC32チェックサムおよび非圧縮サイズを2^32で割った余りを含むトレーラーを付加します。
OSとブラウザの互換性
GZIPストリームは、Linux、macOS、Windowsなどの最新オペレーティングシステム間で幅広い互換性を誇ります。gzip、gunzip、7-Zipなどのコマンドラインツールは、GZIPファイルをネイティブで読み取ります。Webブラウザは、サーバーからHTTPレスポンスを受信したときにGZIPの展開を自動的に処理しますが、生のDEFLATEでは多くの場合、JavaScript環境またはWebAssemblyモジュール内にカスタムパーサーロジックが必要になります。
役立つ情報
基盤となるDEFLATEペイロードが無傷であっても、末尾のCRC32チェックサムが破損していると抽出ツールが中止する原因となるため、展開ツールがGZIPトレーラーを正しく読み取ることを必ず確認してください。
よくある質問
品質を落とさずに生DEFLATEをGZIPストリームに変換するにはどうすればよいですか?
両方の形式で、まったく同じDEFLATEアルゴリズムに基づいたロスレス圧縮が使用されます。これらを相互変換すると、既存の圧縮バイトの周囲にコンテナヘッダーとチェックサムが追加されるだけであるため、ラッピングプロセス中にデータ損失は一切発生しません。
生DEFLATEとGZIPストリームの違いは何ですか?
生DEFLATEには、識別ヘッダーやフッターなしで圧縮されたペイロードのみが含まれています。GZIPストリームは、メタデータの追跡とエラー検出のために、10バイトのヘッダーと8バイトの末尾のチェックサムを生のDEFLATEデータに追加する標準化されたファイルコンテナです。