我目前正在阅读有关编码/解码数据的DEFLATE方法。我知道这个过程由两部分组成:
我。将重复信息(在指定窗口内)替换为引用,返回上一个相同的部分。
II。使用霍夫曼编码来减少最常出现的符号的大小。
我对(i)有疑问。 DEFLATE使用LZ77,它基于大小窗口搜索信息,如果发现任何重复信息,则用“指针”替换它。这很有道理。
然而,当使用LZ77解码时,DEFLATE如何识别指针? (指针是长度 - 距离对;如何判断它是指针还是只是初始数据中存在的数字?)
参考:http://en.wikipedia.org/wiki/DEFLATE#Duplicate_string_elimination
答案 0 :(得分:4)
建议阅读更准确的Deflate RFC 1951 specification并回答这些问题。
你会在=>中看到什么3.2.5。压缩块(长度和距离代码)
“将字面和长度字母合并为单个字母”
这意味着,通过简单地检索下一个符号,您可以立即知道它是文字(0..255),还是匹配长度(257..285),甚至是块的结尾(256)。在匹配长度的情况下,也必须解码参考(偏移)。偏移量使用单独的树进行编码。