Java: 以最节省内存的方式存储位

5
我已经编写了一个算法来实现Huffman编码以压缩文本文件。它基本上接受一个字符串作为输入并生成一个位串作为输出。然而,我遇到了存储这种二进制数据的问题,因为它以每个位作为字符存储,并消耗2个字节的内存进行存储。最终结果是,输出文件比输入文件更大,使整个程序毫无用处。我应该如何存储此二进制输出,使得每个位仅占用一个位的存储空间? PS. 我尝试过使用BitSet,但这并没有改变输出的大小。

2
将您的数据存储在字节数组中。 - Stanislav Mamontov
1
正如上面的评论所建议的那样,使用一个 byte[] 数组,然后可以通过 FileOutputStream 将其写入文件中。 - Philipp Seeger
尝试过了,但没有成功。我猜是因为每个位都被存储为一个字节,但我可能错了。目标是使输出比输入小得多。 - Prathamesh
问题在于中间步骤,根本不要将它们存储在字符串中。只需将它们转储到一个byte[](或BitSet)中即可。 - arynaq
1个回答

1
一旦您在BitSet中获得了结果,您可以调用BitSet.toByteArray()将数据保存到文件中,例如:
FileUtils.writeByteArrayToFile(new File(...), bitSet.toByteArray());

使用 BitSet.valueOf(byte[]) 从文件中读取数据:
BitSet bitSet = new BitSet(FileUtils.readFileToByteArray(new File(...)));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接