| 原作者 | ヤン・コレット |
|---|---|
| 開発者 | ヤン・コレット |
| 初回リリース | 2011年4月24日 |
| 安定版リリース | 1.10.0 [1]
/ 2024年7月22日 |
| リポジトリ |
|
| 書かれた | C |
| オペレーティング·システム | クロスプラットフォーム |
| プラットフォーム | ポータブル |
| タイプ | データ圧縮 |
| ライセンス | 簡易BSDライセンス |
| Webサイト | 翻訳元 |
| 魔法の数字 | 04 22 4d 18[2] |
|---|---|
| フォーマットの種類 | データ圧縮 |
| Webサイト | https://github.com/lz4/lz4/blob/master/doc/lz4_Frame_format.md |
LZ4 は、圧縮と解凍の速度に重点を置いた ロスレス データ圧縮 アルゴリズムです。バイト指向の圧縮方式で あるLZ77ファミリに属します。
特徴
LZ4アルゴリズムは、速度と圧縮率の適切なトレードオフを提供することを目指しています。通常、同様のLZOアルゴリズムよりも圧縮率は低く(つまり、悪く)、LZOアルゴリズムはDEFLATEなどのアルゴリズムよりも劣ります。しかし、LZ4の圧縮速度はLZOと同等で、DEFLATEよりも数倍高速であり、解凍速度はLZOよりも大幅に高速です。[3]
デザイン
LZ4は辞書マッチング段階(LZ77)のみを使用し、他の一般的な圧縮アルゴリズムとは異なり、エントロピー符号化段階(例: DEFLATEのハフマン符号化)と組み合わせません。[4] [5]
LZ4 アルゴリズムは、データを一連のシーケンスとして表します。各シーケンスは、2 つの 4 ビット フィールドに分割された 1 バイトのトークンで始まります。最初のフィールドは、出力にコピーされるリテラル バイトの数を表します。2 番目のフィールドは、すでにデコードされた出力バッファからコピーされるバイト数を表します (0 は、最小一致長である 4 バイトを表します)。いずれかのビット フィールドの値が 15 の場合、長さが長く、長さに追加されるデータのバイトが 1 つ追加されることを示します。これらの追加バイトの値が 255 の場合、さらにもう 1 バイト追加されることを示します。したがって、任意の長さは、値 255 を含む一連の追加バイトで表されます。リテラルの文字列は、トークンと、文字列の長さを示すために必要な追加バイトの後に続きます。その後に、出力バッファ内でコピーを開始する位置を示すオフセットが続きます。一致長の追加バイト (ある場合) は、シーケンスの最後にあります。[6] [7]
圧縮はストリームまたはブロック単位で実行できます。最適な一致を見つけるためにより多くの労力を費やすことで、より高い圧縮率を達成できます。これにより、出力が小さくなり、解凍が速くなります。
実装
Yann Collet によるCのリファレンス実装は、 BSD ライセンスでライセンスされています。Java 、C#、Rust、Pythonなど、さまざまな言語でポートとバインディングがあります。[8] Apache Hadoopシステムは、高速圧縮のためにこのアルゴリズムを使用します。LZ4 は、 Linux カーネル3.11でもネイティブに実装されました。 [9] ZFS ファイルシステムのFreeBSD、Illumos、 Linux 上のZFS、および ZFS-OSX 実装は、オンザフライ圧縮用の LZ4 アルゴリズムをサポートしています。[10] [11] [12] [13] Linux は、3.19-rc1 以降、SquashFSで LZ4 をサポートしています。 [14] LZ4 は、Yann Collet による新しいzstdコマンドラインユーティリティ でもサポートされています。
- LZ4は拡張7zipバージョンで利用可能。[15]
参考文献
- ^ 「LZ4 v1.10.0 - マルチコア版」。2024年7月22日。 2024年7月23日閲覧。
- ^ Collet, Yann. 「LZ4 フレーム形式の説明」。GitHub。2020年10 月 7 日閲覧。
- ^ Michael Larabel (2013 年 1 月 28 日). 「LZ4 による Linux カーネルの圧縮のサポート」. Phoronix . 2015 年8 月 28 日閲覧。
- ^ Collet, Yann (2019年3月30日). 「LZ4ブロックフォーマットの説明」. GitHub . 2020年7月9日閲覧。
エントロピーエンコーダーバックエンドもフレーミングレイヤーもありません。
- ^ DEFLATE圧縮データフォーマット仕様バージョン1.3。IETF。doi : 10.17487/ RFC1951。RFC 1951。2020年7月9日閲覧。
- ^ Yann Collet (2011年5月26日). 「RealTime Data Compression」 . 2015年8月28日閲覧。
- ^ ticki (2016年10月25日). 「LZ4の仕組み」 . 2017年6月29日閲覧。
- ^ 非常に高速な圧縮アルゴリズム http://www.lz4.org on GitHub
- ^ Jonathan Corbet (2013 年 7 月 19 日). 「カーネル開発」. LWN.net . 2015 年8 月 28 日閲覧。
- ^ 「FreeBSD 9.2-RELEASE リリースノート」。FreeBSD 。 2013年11月13日。 2015年8月28日閲覧。
- ^ 「LZ4 圧縮」。illumos。2018年10月9日時点のオリジナルよりアーカイブ。2015年8月28日閲覧。
- ^ Illumos #3035 GitHubの ZFS と GRUB での LZ4 圧縮サポート
- ^ 「機能: lz4 圧縮」。OpenZFS。2015年8月 28 日閲覧。
- ^ Phillip Lougher (2014 年 11 月 27 日). 「Squashfs: LZ4 圧縮構成オプションを追加」 . 2015 年8 月 28 日閲覧。
- ^ 7-zip-zstd
外部リンク
- 公式サイト
