来自Wikipedia的说明:
LZ4算法将数据表示为一系列序列。每个序列都以一个字节标记开头,该标记分为两个4位字段。第一个字段表示要复制到输出的文字字节数。第二个字段表示从已经解码的输出缓冲区复制的字节数(0表示最小匹配长度为4个字节)。任一位域中的值15表示长度较大,并且存在要添加到长度的额外字节数据。这些额外字节中的值255表示还要添加另一个字节。因此,任意长度由包含值255的一系列额外字节表示。在文字字符串之后出现令牌以及指示字符串长度所需的任何额外字节。接下来是一个偏移量,指示输出缓冲区中开始复制的距离。匹配长度的额外字节(如果有的话)出现在序列的末尾
我根本不明白!有没有人有一个简单的方法来理解例子? 例如,在上面的解释中,什么是文字字节,什么是匹配?当我们刚刚开始压缩时,我们怎么能有一个解码的输出缓冲区?什么长度?
here的解释对我来说也是难以理解的。
一个简单的例子会很好,除非你有更好的解释方法。
答案 0 :(得分:6)
首先,阅读正在使用的核心方法LZ77。该文本描述了在前面的数据中编码一系列文字和字符串匹配的特定方法。
匹配是指未压缩数据中的下一个字节出现在先前解压缩的数据中。因此,不是直接发送这些字节,而是发送长度和偏移量。然后你向后偏移字节并将长度字节复制到输出。
是的,您不能在流的开头匹配。你必须从文字开始。 (除非有预设字典,这是另一个主题。)