如何将霍夫曼编码比特流存储为二进制文件?
问问题
760 次
1 回答
3
要存储编码,您需要具备三样东西:
- 某种重构编码树的方法,将每个字符映射到一个位模式。
- 流的实际编码。
- 某种检测编码数据结束的方法。
有很多方法可以解决这些问题。您可以将每个字符的位模式显式存储在一个表中,或者可以对您压缩的所有流使用相同的编码表。至于如何检测流的结束,一种选择可能是使用伪 EOF 字符来终止该流。为此,在构建 Huffman 编码树时,向其中添加一个具有多重性的新字符,该字符将用作描绘流末端的标记。在写入结果时,您在末尾写入此字符,以便您可以知道流在哪里结束,即使它不使用完全适合一个字节的位数。
为了存储实际内容,我建议将编码表示缓冲到一个位向量中,该位向量会自动以八位的倍数刷新到文件流中。当然,这不是唯一的方法,所以选择最有效的方法。
于 2011-02-13T19:44:01.220 回答