霍夫曼用Java编码

时间:2011-04-26 12:54:32

标签: java huffman-code

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

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

5 个答案:

答案 0 :(得分:4)

您可以在创建时创建BitSet来存储编码,并在完成后将字符串表示写入文件。

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

我确信那里有霍夫曼课程,但我不是马上意识到他们在哪里。如果你想自己动手,可以立即想到两种方法。

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

第二个更雄心勃勃,更自包含的想法是编写一个OutputStream实现,它有一个写一个位的方法,然后这个OutputStream类会执行前面提到的缓冲/移位/累积本身并可能传递结果直到第二个,包裹的OutputStream。

答案 3 :(得分:1)

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

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

Huffmann sample analysis here

答案 4 :(得分:1)

您可以在此处找到有效(快速)的实施方式:http://code.google.com/p/kanzi/source/browse/src/kanzi/entropy/HuffmanTree.java