GZIPをDeflateに変換
GZIPストリームを生のDEFLATEに変換し、外部のファイルラッパーとヘッダーメタデータを取り除くことで、特殊なネットワークプロトコルや低レベルのアーカイブ用に圧縮ペイロードのみを残します。
フォーマットの比較と技術仕様
| 仕様 | GZIP | DEFLATE |
|---|---|---|
| MIMEタイプ | application/ | application/ |
| タイプ | DEFLATEストリームコンテナ | raw DEFLATEストリーム |
| 圧縮 | DEFLATE(RFC 1951) | LZ77 + ハフマン符号 |
| 標準仕様 | IETF RFC 1952 | IETF RFC 1950 / RFC 1951 |
| マジックバイトヘッダー | 1F 8B (gzip ID1/ID2) | 78 01 / 78 9C / 78 DA (zlib header bytes) |
フォーマットの概要と用途
GZIPストリームから生のDEFLATEへの変換は、Web開発、ネットワークプログラミング、および低レベルのデータストレージワークフローで頻繁に行われます。フォーマットに元のファイル名や変更タイムスタンプなどの便利なメタデータが含まれているため、開発者は単一のファイルをディスクに保存する際にGZIPをよく扱います。しかし、最新のHTTP圧縮プロトコルや特定のバイナリフォーマットでは、ラッパーバイトを含まない圧縮ペイロードのみが期待されます。 この変換を実行することで、エンジニアは標準的な圧縮データをネットワークストリームやカスタムパーサーに直接流し込むことができます。たとえば、カスタムHTTP応答ハンドラーの構築やZIPアーカイブの操作では、多くの場合、GZIPヘッダーとCRC32フッターを削除して生のアルゴリズム出力を分離する必要があります。制約のあるプログラミング環境においてすべてのバイトが重要である場合、この追加のコンテナデータを削除することでオーバーヘッドが削減されます。
技術仕様とコーデックの詳細
MIMEタイプ application/gzip で識別されるGZIPストリームは、RFC 1952で定義されたコンテナ構造を使用します。2バイトのマジックナンバーヘッダー(0x1F、0x8B)で始まり、その後に圧縮フラグ、変更時刻、オペレーティングシステムID、任意のファイル名が続きます。圧縮データはその中央にあり、ファイル末尾には4バイトのCRC32チェックサムと4バイトの非圧縮サイズが格納されます。一方、生のDEFLATEはRFC 1951のビットストリームで、固定シグネチャ、フレーミングヘッダー、フッターはありません。MIMEタイプ application/zlib が示すのはRFC 1950のzlibラッパー付きDEFLATEであり、生のDEFLATEストリームではありません。GZIPから生のDEFLATEへの変換では、圧縮ペイロードを保ったままGZIPのメタデータとチェックサムを取り除きます。
OSとブラウザの互換性
生のDEFLATEストリームは、Python、Node.js、C++などの標準的なプログラミング言語を通じて、最新のオペレーティングシステムやWebランタイムでネイティブに実行されます。ブラウザはHTTPコンテンツエンコーディングヘッダースタックを介してDEFLATEをネイティブに処理します。Windows、macOS、Linuxなどのオペレーティングシステムは、zlibなどのシステム圧縮ライブラリを介して生ストリームをサポートします。AndroidやiOSなどのモバイルプラットフォームは、カスタムアプリストレージ層向けのDEFLATEルーチンへの直接APIアクセスを提供します。
役立つ情報
ターゲットパーサーがzlibラップされたストリームではなく純粋なRFC 1951ストリームを期待していることを常に確認してください。zlibは生のDEFLATEパーサーが拒否する2バイトのヘッダーを追加するためです。
よくある質問
品質を落とさずにGZIPストリームを生DEFLATEに変換するにはどうすればよいですか?
両方のフォーマットは同一のロスレス圧縮アルゴリズムを使用します。それらを変換することは、単にGZIPコンテナを読み取り、10バイトのヘッダーと8バイトのフッターを削ぎ落とし、内部の圧縮ブロックを保存することを意味します。基盤となるアルゴリズムが変更されないため、データは失われません。
GZIPストリームと生のDEFLATEの違いは何ですか?
GZIPは、マジックバイトヘッダー、元のファイル名、変更タイムスタンプ、チェックサムフッターを含む完全なファイルコンテナです。生のDEFLATEは圧縮データそのものであり、ヘッダー、フッター、ファイルメタデータは含まれていません。