zlibは、データの圧縮と伸張を行うための、広く利用されている自由
ソフトウェアライブラリです。
可逆圧縮アルゴリズムである
Deflate(RFC 1951)を実装しており、効率的なデータ処理を可能にします。この
ライブラリは、ヘッダーやフッターを含む特定のデータ形式(RFC 1950)をサポートするだけでなく、GZIP形式(RFC 1952)や、ヘッダーやフッターを持たないRAW形式も扱うことができます。
zlibの概要
zlibは、
ジャン=ルー・ガイイと
マーク・アドラーによって開発されました。彼らはgzipの主要開発者でもあり、ジャンが主に圧縮部分、マークが伸張部分を担当しました。
ライセンスは、gzipとは異なり、より緩やかなzlib License(BSD
ライセンスに近い)が採用されています。
C言語で記述されており、多くの
プログラミング言語で利用できるように、ラッパー
ライブラリなどの形で提供されています。例えば、Java SEのJREには、標準Javaクラス
ライブラリのjava.util.zipパッケージとして組み込まれており、
Javaプラットフォーム上でも容易に利用できます。また、
.NET Frameworkや.NET Coreでは、System.IO.Compression名前空間を通じて各種クラスが提供されています。
zlibは、商用・非商用を問わず多くの
ソフトウェアで採用されており、特に画像フォーマットPNGが
Deflateの実装を必要とするため、画像表示
ソフトウェアにも広く使われています。また、ほとんどの
オペレーティングシステムに共有
ライブラリとして含まれており、パソコン、サーバー、携帯電話など、非常に多くの環境で使用されています。そのため、zlibに問題が発見されると、広範囲なシステムに影響が及ぶ可能性があります。過去には、2002年と2005年にセキュリティ問題が発見され修正されましたが、その後も脆弱性が発見されるたびにパッチが提供されており、システムの健全性を保つためには、定期的な
ライブラリの更新が必要です。
ヘッダーとフッター
zlibのデータ形式(RFC 1950)では、圧縮データの前に2バイト以上のヘッダー、末尾に4バイトのAdler-32チェックサムが付加されます。ヘッダーの最初の2バイトは以下の情報を含んでいます。
1バイト目:
上位4ビット:
LZ77のウィンドウサイズを示す圧縮情報。例えば、7の場合は32KBのウィンドウサイズを表します。
下位4ビット:圧縮方式を示す数値。通常は8が用いられます。
2バイト目:
上位2ビット:圧縮レベルを示します。デフォルト値は2です。
6ビット目:プリセット辞書の有無を示します。
下位5ビット:ヘッダー2バイト分のチェックビット。
プリセット辞書を使用する場合は、3バイト目以降に辞書情報が続き、使用しない場合は、圧縮データが続きます。一方、gzip形式(RFC 1952)では、10バイト以上のヘッダーと8バイトのフッターが付加されます。
Media Type
2012年8月に発行されたRFC 6713では、application/zlibが定義され、application/gzipとともにIANAに正式登録されました。これにより、zlibで圧縮されたデータがインターネット上で適切に識別されるようになりました。
関連情報
関連項目
gzip
ZIP (ファイルフォーマット)
外部リンク
公式サイト(英語)
zlibは、その高い圧縮率と幅広い互換性から、多くの
ソフトウェアやシステムで不可欠な役割を果たしています。この
ライブラリの理解は、
データ圧縮技術を理解する上で非常に重要です。