zlib(/ ˈziːlɪb /または「zeta - lib」、/ ˈziːtəˌlɪb /)[ 3 ] [ 4 ]は、Jean -Loup GaillyとMark Adlerによって作成されたデータ形式およびロスレスデータ圧縮ソフトウェアライブラリです。このライブラリはDeflateアルゴリズムを実装しており、 zlibデータ形式、gzipファイル形式、または単にDeflateストリームとしてデータ圧縮および解凍をサポートしています。[ 5 ]
zlibは、 Linux、macOS、iOSなど、多くのソフトウェアプラットフォームにおいて重要な構成要素となっています。また、 PlayStation 4、PlayStation 3、Wii U、Wii、Xbox One、Xbox 360といったゲーム機にも使用されています。
Zlibの最初の公開バージョンである0.9は、1995年5月1日にリリースされ、当初はlibpng画像ライブラリとの併用を想定していました。Zlibはフリーソフトウェアであり、zlibライセンスの下で配布されています。
RFC 1950はzlibデータフォーマットを規定している。[ 6 ]
zlibデータフォーマットは、2バイトのヘッダー、オプションの追加ヘッダーフィールド、Deflate圧縮データ、および4バイトのトレーラーで構成されます。
Deflate圧縮は通常、zlibデータ形式またはgzipファイル形式を使用し、圧縮データにヘッダーとトレーラーを追加します。これにより、Deflateストリームでは提供されないストリーム識別とエラー検出が可能になります。
zlib形式(最低6バイト)は、ファイルシステムのメタデータを格納するgzip形式(最低18バイト)よりもサイズが小さい。
2018年9月現在 zlib は、 LZ77 (Lempel–Ziv 1977) の変種とハフマン符号化を組み合わせたDEFLATEと呼ばれるアルゴリズムのみをサポートしています。[ 12 ]このアルゴリズムは、システム リソースの使用を最小限に抑えながら、さまざまなデータに対して優れた圧縮を提供します。これは、Zip アーカイブ フォーマットでも使用されているアルゴリズムです。ヘッダーには他のアルゴリズムも含まれていますが、現在実装されているものはありません。
zlibは、プロセッサとメモリの使用を制御する機能を提供します。圧縮レベルを指定することで、速度と圧縮率のトレードオフを調整できます。また、メモリを節約する機能も備えており、組み込みシステムなど、メモリ容量が限られた環境で役立ちます。
圧縮は、特定のデータタイプに合わせて最適化できます。ライブラリを使用して常に特定のデータタイプを圧縮する場合、特定の戦略を用いることで圧縮率とパフォーマンスが向上する可能性があります。例えば、データに長い繰り返しバイト列が含まれている場合、ランレングス符号化(RLE)戦略を用いることで、より高速かつ良好な結果が得られる場合があります。一般的なデータの場合は、デフォルトの戦略が推奨されます。
圧縮データ内のエラーは検出され、スキップされる場合があります。さらに、圧縮ストリームに「フルフラッシュ」ポイントが書き込まれると、破損したデータはスキップされ、次のフラッシュポイントで解凍が再同期されます。ただし、破損したデータのエラー回復は提供されません。フルフラッシュポイントは、一部のマルチメディアアプリケーションのように、データ損失が問題にならない、信頼性の低いチャネル上の大容量データストリームに役立ちます。ただし、フラッシュポイントを多数作成すると、圧縮速度と圧縮量(比率)の両方に影響を与える可能性があります。
圧縮または解凍できるデータの長さに制限はありません。ライブラリを繰り返し呼び出すことで、無制限の数のデータブロックを処理できます。一部の補助コード(カウンタなど)は、長いデータストリームでオーバーフローを起こす可能性がありますが、これは実際の圧縮または解凍には影響しません。
長い(あるいは無限の)データストリームを圧縮する場合、定期的にフルフラッシュポイントを書き込むことをお勧めします。
今日では、zlibは事実上の標準となっており、標準文書ではzlibとDEFLATEがしばしば同義語として使われ、何千ものアプリケーションが直接的または間接的に圧縮にzlibを利用している。[ 13 ]これには以下が含まれる。
zlibは、コードの移植性が高く、ライセンスが寛容で、メモリ使用量が比較的少ないため、Apple iPhoneやSony PlayStation 3などの多くの組み込みデバイスでも使用されています。
古いコードベースに基づいて構築された、一般的に使用されているライブラリであるzlibは、このライブラリの改良版だと主張する第三者によって頻繁にフォークされている。
。zlib は Jean-Loup Gailly (圧縮) と Mark Adler (解凍) によって作成されました。
Jean-Loup Gailly と Mark Adler は zlib フォーマットを設計し、
...
ここで説明する形式のすべてのマルチバイト数値は、最上位バイトが最初に格納されます (メモリ アドレスの下位)。
...、
バイトのビットを、ビット 0 が最下位ビットとなるように番号付けします
。...