DEFLATE解码

时间:2012-01-24 21:44:15

标签: algorithm compression zip deflate

我目前正在阅读有关编码/解码数据的DEFLATE方法。我知道这个过程由两部分组成:

我。将重复信息(在指定窗口内)替换为引用,返回上一个相同的部分。

II。使用霍夫曼编码来减少最常出现的符号的大小。

我对(i)有疑问。 DEFLATE使用LZ77,它基于大小窗口搜索信息,如果发现任何重复信息,则用“指针”替换它。这很有道理。

然而,当使用LZ77解码时,DEFLATE如何识别指针? (指针是长度 - 距离对;如何判断它是指针还是只是初始数据中存在的数字?)

参考:http://en.wikipedia.org/wiki/DEFLATE#Duplicate_string_elimination

1 个答案:

答案 0 :(得分:4)

建议阅读更准确的Deflate RFC 1951 specification并回答这些问题。

你会在=>中看到什么3.2.5。压缩块(长度和距离代码)

“将字面和长度字母合并为单个字母”

这意味着,通过简单地检索下一个符号,您可以立即知道它是文字(0..255),还是匹配长度(257..285),甚至是块的结尾(256)。在匹配长度的情况下,也必须解码参考(偏移)。偏移量使用单独的树进行编码。