LZ4
From Wikipedia, the free encyclopedia
| 作者 | Yann Collet |
|---|---|
| 初版 | 2011年4月24日 |
| 最新版 | |
| リポジトリ | |
| プログラミング 言語 | C言語 |
| 対応OS | クロスプラットフォーム |
| プラットフォーム | ポータブル |
| 前身 | lha(?) |
| 後継 | Zstandard(事実上の後継?) |
| 対応言語 | 日本語・英語など。 |
| サポート状況 | サポート中です。(開発中) |
| 種別 | データ圧縮、オープンソース(?) |
| ライセンス | 二条項BSDライセンス |
| 公式サイト |
lz4 |
LZ4は、圧縮と展開の速さに焦点を当てた可逆圧縮アルゴリズムである。バイト指向の圧縮方法であるLZ77ファミリーに属する。Yann Collet が2011年より開発している。
Yann Collet は LZ4 の開発を始めた4年後の2015年より Zstandard も開発している。
設計
LZ4はデータをシーケンスの連続として表現する。それぞれのシーケンスは、2つの4ビットフィールドに分けられた1バイトのトークンで始まる。最初のフィールドは、出力にコピーされるリテラルバイトの数字で表現される。2つ目のフィールドはすでにデコードした出力バッファからコピーするバイト数を表す(0は最小の一致長である4バイトを表わす)。ビットフィールドのどちらかの値が15なら、長さがそれ以上で追加のデータがあることを示す。値が255のときは、さらにもう1バイト追加されることを示す。そのように、255の値を含む追加のバイトの並びによって任意の長さが表現される。リテラルの文字列が、追加のバイトとトークンのあとにあるなら文字列の長さを示す必要がある。この後にはオフセットが続き、出力バッファでコピーを始めるときにどれだけ戻るかを示す。(もしあればであるが、)シーケンスの終わりには一致長の追加バイトがある [4]。
圧縮はストリームまたはブロックで実行できる。より高い圧縮率は、最良一致を探し出すことに、より注力することで達成される。その結果より小さな出力とより速い展開速度が得られる。
実装
Yann Collet による C のリファレンス実装があり、BSDライセンスである。 Java、C#、Python などの多様な言語へのポートやバインディングがある[5]。