| zlib | |
|---|---|
| 初回リリース | 1995年5月1日 (1995-05-01) |
| 安定版リリース | 1.3.1 [ 1 ]
/ 2024年1月22日 (22 January 2024) |
| リポジトリ | |
| 書かれた | C |
| オペレーティング·システム | クロスプラットフォーム |
| タイプ | データ圧縮 |
| ライセンス | zlibライセンス |
| Webサイト | zlib.net |
zlib(/ ˈ z iː l ɪ b /または「zeta -lib」、/ ˈ z iː t ə ˌ l ɪ b /) [ 2 ] [ 3 ]は、データ圧縮およびデータフォーマットに使用されるソフトウェアライブラリです。 [ 4 ] zlibはJean-loup GaillyとMark Adlerによって書かれ、gzipファイル圧縮プログラムで使用されるDEFLATE圧縮アルゴリズムを実装しています。 zlibは、 Linux、macOS、iOSなど、多くのソフトウェアプラットフォームの重要なコンポーネントでもあります。 また、 PlayStation 4、PlayStation 3、Wii U、Wii、Xbox One、Xbox 360などのゲームコンソールでも使用されています。
Zlibの最初の公開バージョンである0.9は1995年5月1日にリリースされ、当初はlibpng画像ライブラリでの使用を目的としていました。これはフリーソフトウェアであり、zlibライセンスに基づいて配布されています。
生のDEFLATE圧縮データ(RFC 1951)[ 5 ]は、通常、ヘッダーとフッターを追加することでデータをカプセル化するzlibまたはgzipラッパーを使用して書き込まれます。これにより、生のDEFLATEデータでは提供されないストリーム識別とエラー検出が可能になります。
zlibラッパー(RFC 1950)[ 4 ]はgzipラッパー(RFC 1952)[ 6 ]よりも小さく、後者はファイル名やその他のファイルシステム情報を格納する。
2018年9月現在、zlibはDEFLATE[update]と呼ばれるアルゴリズムのみをサポートしています。これは、 LZ77(Lempel–Ziv 1977)のバリエーションとハフマン符号化を組み合わせたものです。[ 7 ]このアルゴリズムは、システムリソースの使用を最小限に抑えながら、幅広いデータに対して優れた圧縮率を提供します。これは、 Zipアーカイブ形式にも使用されているアルゴリズムです。ヘッダーは他のアルゴリズムもサポートしていますが、現在実装されているものはありません。
zlibは、プロセッサとメモリの使用を制御する機能を提供します。圧縮レベルを指定することで、速度と圧縮率をトレードオフできます。また、一部の組み込みシステムなど、メモリが制限された環境で役立つ、メモリを節約する機能も備えています。
圧縮は特定のデータタイプに合わせて最適化できます。ライブラリを使用して特定のデータタイプを常に圧縮する場合は、特定の戦略を使用することで圧縮率とパフォーマンスが向上する可能性があります。例えば、データに長いバイト列の繰り返しが含まれている場合、ランレングス符号化(RLE)戦略を使用すると、より高速で良好な結果が得られる可能性があります。一般的なデータの場合は、デフォルトの戦略が推奨されます。
圧縮データ内のエラーが検出され、スキップされる場合があります。さらに、圧縮ストリームに「フルフラッシュ」ポイントが書き込まれると、破損したデータはスキップされ、次のフラッシュポイントで解凍処理が再同期されます。ただし、破損データのエラー回復は提供されません。フルフラッシュポイントは、信頼性の低いチャネルで大量のデータストリームを送信し、多少のデータ損失が問題にならない場合(一部のマルチメディアアプリケーションなど)に有効です。ただし、フラッシュポイントを多数作成すると、圧縮速度だけでなく、圧縮率(圧縮率)にも影響が出る可能性があります。
圧縮または解凍できるデータの長さに制限はありません。ライブラリを繰り返し呼び出すことで、無制限の数のデータブロックを処理できます。一部の補助コード(カウンターなど)は、長いデータストリームを処理する際にオーバーフローが発生する可能性がありますが、実際の圧縮または解凍には影響しません。
長い (または無限の) データ ストリームを圧縮する場合は、定期的にフルフラッシュ ポイントを書き込むことをお勧めします。
今日では、zlibは事実上の 標準となっており、標準文書ではzlibとDEFLATEが同じ意味で使われることが多く、何千ものアプリケーションが直接的または間接的に圧縮にzlibを利用しています。[ 8 ]これらには以下が含まれます。
zlib は、コードが移植可能で、ライセンスが柔軟であり、メモリ フットプリントが比較的小さいため、Apple iPhoneや Sony PlayStation 3などの多くの組み込みデバイスでも使用されています。
zlib は、古いコードベース上に構築されたよく使用されるライブラリであり、このライブラリの改善を主張するサードパーティによって 頻繁にフォークされています。