如何使用java保存文件位?

问题描述:

现在我正在研究使用霍夫曼编码进行文本压缩的项目。我能够读入一个文件(包含ASCII文本)并创建一个霍夫曼编码信息。例如,如果我的文件"input.txt"包含以下文本: Missippi river,那么我的编码代码字将是这样的 1110100110111001001010000110101111001110其中有40位,而我的"input.txt"是14个字节(14 * 8 = 112位)。所以我减少了112位到40位,但是如何将我的代码字(包含O和1)输出到只有40位长的文件?我试图把这个字符串放入一个.txt.文件,但是这个.txt.文件最终比我的"input.txt"长,从而使我的整个项目变得毫无价值。我正在尝试创建一个编码器/解码器模型。我已经成功地创建了编码器部分,并且我也能够创建霍夫曼码字,但是如何输出这些信息以便我的解码器可以读取并解压缩。如何使用java保存文件位?

感谢

+0

为什么要将位存储为字符串? – m0skit0

+0

我从树上得到它,所以使用一个字符串似乎很容易。后来我使用BitSet将其转换为int。 – theprogrammer094

而不是0和1的字符串,你可以使用一个java BitSet存储1/0的布尔位,然后当你写它,你会使用toByteArray直接写字节作为一个二进制文件,而不是写一串文本。

+0

我实际上使用了一个BitSet和我的序列化的BitSet对象,它的结果比我的实际输入更大。 'toByteArray'会相同吗? – theprogrammer094

+0

@ rohitkrishna094不,序列化是为了稍微不同的目的而设计的(存储数据使其可以自动回到对象)。如果直接写字节,效率会更高(因为只是存储字节,而不是BitSet的内部参数/状态) – hexafraction

+0

噢。谢谢,但你能给我一个链接或一个小的代码片段,解释字节数组是如何工作的。 – theprogrammer094