区分哈夫曼二进制头和编码二进制

Differentiating Binary Header and Encoded Binary In Huffman

本文关键字:二进制 编码 哈夫曼      更新时间:2023-10-16

我正在创建一个基本的霍夫曼编码/解码工具。我发现这个问题帮助我实现了一个头,以二进制形式存储我生成的霍夫曼树。我也可以使用树来将文本编码/解码为二进制文件。所以程序实际上可以工作,但是我仍然有一个问题。

目前,头文件和编码的二进制文件在单独的文件中,因为我无法找到一种方法将它们放入同一个文件中,使我在解码过程开始时很容易读取头文件。硬编码某些"头结束"字符似乎是一种相当hack的方法,更不用说有可能将终止字符的一些初始位作为头中编码树的一部分读入,从而导致整个树被损坏。

虽然我的程序使用单独的头文件和体文件,但我想合并它们。有什么好主意吗?

您不需要做任何特别的事情来合并您的标题(树)和内容(霍夫曼编码的文本)

如果你查看你在这里发布的问题的答案,并检查解码算法(那里的ReadNode(BitReader reader)伪码函数),你可以看到算法停止读取树只是因为它读取了所有-而不是因为它达到了EOF字符或类似的东西。

它不需要搜索EOF,因为它只对有子节点(0位)的节点递归地调用自己。一旦算法到达了所有的叶子,就没有更多的递归调用,所以阅读器将被精确地定位在正确的位置,让你开始阅读内容(就在阅读整个标题之后,没有额外的"标题结束"指示。