8

来自维基百科的描述:

LZ4 算法将数据表示为一系列序列。每个序列都以一个字节标记开始,该标记分为两个 4 位字段。第一个字段表示要复制到输出的文字字节数。第二个字段表示要从已解码的输出缓冲区复制的字节数(0 表示 4 个字节的最小匹配长度)。任一位域中的值 15 表示长度较大,并且有一个额外的数据字节要添加到长度中。这些额外字节中的值 255 表示要添加另一个字节。因此,任意长度由一系列包含值 255 的额外字节表示。在文字字符串之后是标记和指示字符串长度所需的任何额外字节。后面是一个偏移量,指示输出缓冲区中开始复制的距离。匹配长度的额外字节(如果有)出现在序列的末尾

我完全不明白!有没有人有一个简单的方法来理解例子?例如,在上面的解释中,什么是文字字节,什么是匹配?当我们刚开始压缩时,我们如何才能有一个解码的输出缓冲区?什么长度?

这里的解释对我来说也是不可理解的。

一个简单的例子会很好,除非你有更好的解释方式。

4

1 回答 1

7

首先,阅读LZ77,这是正在使用的核心方法。该文本是对在前面的数据中对一系列文字和字符串匹配进行编码的特定方式的描述。

匹配是未压缩数据中的下一个字节出现在先前解压缩的数据中。因此,不是直接发送这些字节,而是发送一个长度和一个偏移量。然后你向后偏移字节并将长度字节复制到输出。

是的,您不能在流的开头进行匹配。你必须从文字开始。(除非有预设字典,这是另一个话题。)

于 2014-01-15T15:54:03.103 回答