区分二进制 Header 和霍夫曼编码的二进制

Differentiating Binary Header and Encoded Binary In Huffman

我正在创建一个基本的 Huffman encoding/decoding 工具。我发现 this 问题帮助我实现了 header 以二进制形式存储我生成的哈夫曼树。我也可以使用树将 encode/decode 文本转换为二进制文件。所以程序确实有效,但我仍然遇到问题。

目前 header 和编码的二进制文件在不同的文件中,因为我无法找到一种方法将它们放入同一个文件中,以便于我阅读 header 在解码过程的开始。在某些 "end of header" 字符中进行硬编码似乎是一种相当老套的方法,更不用说终止字符的某些初始位可能会作为编码树的一部分被读入 header,导致整棵树被破坏。

虽然我的程序使用单独的 header 和 body 文件,但我想合并它们。关于如何执行此操作的任何想法?

您不需要做任何特别的事情来合并您的 header(树)和内容(Huffman-encoded 文本)。

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

它不需要搜索 EOF,因为它仅针对具有 children(0 位)的节点递归调用自身。一旦算法到达所有叶子,就不再进行递归调用,因此 reader 将准确定位在正确的位置,以便您开始阅读内容(在阅读整个 header 之后,没有额外 "end-of-header" 适应症。