我正在开发一个文件压缩程序。我们目前正在实施 .ZIP 存档器标准,以便在生成压缩的 .ZIP 存档器时,任何其他有信誉的压缩器(例如 7zip)都可以完美地理解/解压缩它。
我们现在正在开发基于RFC 1951
的 DEFLATE 算法
我们有 LZ77 的变体和带有固定代码的 Huffman 编码,可以完美地工作并与 RFC 兼容,因此可以使用 Literal-Length + Distance 值。
在动态霍夫曼编码中,我目前能够从一些压缩数据(通过另一个可靠的压缩器压缩)中提取霍夫曼树,但是当开始解压缩真实数据时,我得到的值不正确。
可能我以错误的方式阅读树木。
我还没有特别找到有人准确解释这些树的值存储在压缩数据上的方式的任何地方。
我假设编码数据遵循相同的文字长度值 (0~285) + 距离 (0~30) 以及其对应的每个文字/距离的额外位,如 RFC 中所解释的那样,与固定霍夫曼编码的方式相同。
将其存储在固定霍夫曼编码上的方式是,霍夫曼代码与代码的最高有效位一起存储在内存中的最低有效位上。这样,您就可以逐位向下浏览编码树。
霍夫曼码的额外位以另一种方式存储。
动态霍夫曼编码是否以相同的方式存储它们?
有什么我遗漏的或我应该注意的吗?