2011-04-26 94 views
1

我想编码每个文件的霍夫曼代码。 我已经找到了每个符号的比特长度(它的霍夫曼码)。在Java中的霍夫曼编码

是否有可能在Java中将字符编码到文件中:是否有任何现有的类可以一点一点读写文件,而不是最小维数的char?

回答

2

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

如果您需要快速的位矢量,那么看看colt library。如果你想写单个位而不是自己做所有的位移操作,这非常方便。

+0

只是看着那个位向量。他仍然需要获得'byte []'的支持来写入'ByteBuffer'。我错过了什么? – alphazero 2011-12-08 17:47:02

2

我确定那里有霍夫曼班,但我不知道他们在哪里。如果你想推出自己的,两种方法来做这个春天立即思想。

首先是在内存中组装我的位串,并使用掩码和移位操作符,并将这些位累加到较大的数据对象(即整数或长整数)中,然后用标准流写入文件。

第二个更有雄心的自包含的想法是编写一个OutputStream的实现,该实现有一个写入单个位的方法,然后这个OutputStream类将自己完成上述缓冲/移位/累加操作,并可能通过结果到第二个包装的OutputStream。

4

您可以创建BitSet来存储您的编码,因为您正在创建它,并且只需在完成后将字符串表示形式写入文件即可。

1

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

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

Huffmann sample analysis here