8

ウィキペディアからの説明:

LZ4 アルゴリズムは、データを一連のシーケンスとして表します。各シーケンスは、2 つの 4 ビット フィールドに分割された 1 バイトのトークンで始まります。最初のフィールドは、出力にコピーされるリテラルのバイト数を表します。2 番目のフィールドは、既にデコードされた出力バッファーからコピーするバイト数を表します (0 は 4 バイトの最小一致長を表します)。いずれかのビットフィールドの値 15 は、長さが大きく、長さに追加されるデータの余分なバイトがあることを示します。これらの余分なバイトの値 255 は、さらに別のバイトが追加されることを示します。したがって、任意の長さは、値 255 を含む一連の余分なバイトによって表されます。リテラルの文字列の後には、文字列の長さを示すために必要なトークンと余分なバイトが続きます。この後に、出力バッファー内でコピーを開始する位置を示すオフセットが続きます。match-length の余分なバイト (ある場合) は、シーケンスの最後に来ます。

全然わからなかった!誰かが例を理解する簡単な方法を持っていますか? たとえば、上記の説明では、リテラル バイトとは何ですか。一致とは何ですか? 圧縮を開始したばかりのときに、デコードされた出力バッファを取得するにはどうすればよいでしょうか? 何の長さ?

ここの説明も私には理解不能でした。

より良い説明方法がない限り、簡単な例がいいでしょう。

4

1 に答える 1

7

まず、使用されているコアアプローチであるLZ77について読んでください。テキストは、先行するデータで一連のリテラルと文字列の一致をコーディングする特定の方法の説明です。

圧縮されていないデータの次のバイトが、以前に圧縮解除されたデータで発生した場合に一致します。したがって、これらのバイトを直接送信する代わりに、長さとオフセットが送信されます。次に、offset バイトを後方に移動し、length バイトを出力にコピーします。

はい、ストリームの開始時に一致することはできません。リテラルから始める必要があります。(別のトピックであるプリセット辞書がない場合を除きます。)

于 2014-01-15T15:54:03.103 に答える