1

我想用霍夫曼代码对每个文件进行编码。我找到了每个符号的比特长度(它的霍夫曼代码)。

是否可以在 Java 中将字符编码到文件中:是否有任何现有的类可以逐位读取和写入文件,而不是最小尺寸的 char?

4

5 回答 5

4

您可以在创建时创建一个BitSet来存储您的编码,并在完成后简单地将字符串表示形式写入文件。

于 2011-04-26T14:26:35.500 回答
2

相信我,您真的不想将单个位写入文件。通常我们定义一个字节缓冲区,在内存中构建“文件”,然后在所有工作完成后写入完整的缓冲区。否则它将永远(几乎)。

如果您需要快速位向量,请查看colt 库。如果您想编写单个位并且不自己进行所有这些位移操作,那将非常方便。

于 2011-04-26T13:00:19.803 回答
2

我确定那里有霍夫曼课程,但我并没有立即知道它们在哪里。如果你想自己动手,有两种方法可以立即在脑海中浮现。

第一种是使用掩码和移位运算符将位串组装在内存中,并将位累积到更大的数据对象(即整数或长整数)中,然后使用标准流将它们写入文件。

第二个更雄心勃勃且独立的想法是编写一个具有写入单个位的方法的 OutputStream 实现,然后此 OutputStream 类将执行上述缓冲/移位/累积,并可能将结果传递给一个第二,包装OutputStream。

于 2011-04-26T13:01:22.063 回答
1

你可以在这里找到一个工作(和快速)的实现:http ://code.google.com/p/kanzi/source/browse/src/kanzi/entropy/HuffmanTree.java

于 2012-03-09T23:02:50.857 回答
1

尝试在 java 中编写一个位向量来进行位表示:它应该允许您设置/重置位流中的各个位。

因此,比特流可以保存您的霍夫曼编码。这是最好的方法,而且速度也很快。

霍夫曼样本分析在这里

于 2011-12-08T16:46:07.830 回答