将霍夫曼树与编码比特流一起存储为文件的基本技术是什么?

发布于 2024-10-17 00:20:30 字数 26 浏览 2 评论 0原文

如何将霍夫曼编码位流存储为二进制文件?

How can I store a Huffman Encoded bit stream as a binary file?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你穿错了嫁妆 2024-10-24 00:20:30

要存储编码,您需要具备三件事:

  1. 某种重建编码树的方法,将每个字符映射到位模式。
  2. 流的实际编码。
  3. 检测编码数据结尾的某种方法。

解决这些问题的方法有很多种。您可以将每个字符的位模式显式存储在表中,或者可以对压缩的所有流使用相同的编码表。至于如何检测流的结束,一种选择可能是使用伪 EOF 字符来终止该流。为此,在构建霍夫曼编码树时,向其中添加一个具有多重性的新字符,该字符将充当描绘流末尾的哨兵。在写入结果时,您可以在末尾写入此字符,以便您可以知道流在哪里结束,即使它没有使用完全适合字节的位数。

为了存储实际内容,我建议将编码表示缓冲到位向量中,该位向量会自动刷新到八位倍数的文件流中。当然,这不是唯一的方法,因此请选择最有效的方法。

To store the encoding, you'll need to have three things:

  1. Some way of reconstructing the encoding tree mapping each character to a bit pattern.
  2. The actual encoding of the stream.
  3. Some way of detecting the end of the encoded data.

There are many ways to solve each of these problems. You could explicitly store the bit patterns for each character in a table, or could just use the same encoding table for all streams you compress. As for how to detect the end of the stream, one option might be to use a pseudo-EOF character to terminate this stream. To do this, as you build up the Huffman encoding tree, add to it a new character with multiplicity one that will serve as a sentinel delineating the end of the stream. On writing the result, you write this character at the end so that you can tell where the stream ends even if it doesn't use a number of bits that fits perfectly into a byte.

To store the actual contents I'd suggest buffering the encoded representation into a bit vector that automatically flushes into a file stream on a multiple of eight bits. Of course, this isn't the only way to do this, so go with whatever works best.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文