【问题标题】:Java: Storing bits in the most memory efficient mannerJava:以最节省内存的方式存储位
【发布时间】:2013-10-30 09:46:12
【问题描述】:

我编写了一个算法来实现用于压缩文本文件的霍夫曼编码。它基本上接受一个字符串作为输入并生成一个位串作为输出。但是,我在存储这个二进制数据时遇到了麻烦,因为它被存储为一个字符串,其中每个位都是一个字符,并且消耗 2 个字节的内存进行存储。最终结果,输出文件大于输入,使整个程序一文不值。我应该如何存储这个二进制输出,以便每个位只占用一位内存来存储? 附言。我曾尝试使用 BitSet,但这并没有改变输出的大小

【问题讨论】:

  • 将数据存储在字节数组中。
  • 正如上面的评论所建议的,使用一个字节[],你可以用 FileOutputStream 写入一个文件
  • 试过了,没用。我猜是因为每个位都存储为一个字节,但我可能错了。目标是使输出远小于输入
  • 问题在于中间步骤,根本不要将它们存储在字符串中。只需将它们转储到 byte[](或 BitSet)

标签: java huffman-code storing-data


【解决方案1】:

BitSet 中获得结果后,您可以致电

BitSet.toByteArray() 将您的数据保存到文件,即:

FileUtils.writeByteArrayToFile(new File(...), bitSet.toByteArray());

BitSet.valueOf(byte[]) 从文件中读取您的数据:

BitSet bitSet = new BitSet(FileUtils.readFileToByteArray(new File(...)));

【讨论】:

    猜你喜欢
    • 2011-10-03
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    相关资源
    最近更新 更多