【问题标题】:How to save a file in bits using java?如何使用java以位保存文件?
【发布时间】:2016-04-22 23:58:06
【问题描述】:

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

谢谢

【问题讨论】:

  • 为什么要将位存储为字符串?
  • 我是从树上得到的,所以使用字符串似乎很容易。后来我使用 BitSet 将其转换为 int。

标签: java file file-io bit huffman-code


【解决方案1】:

您可以使用 java BitSet 将 1/0 存储为布尔位,而不是一串 0 和 1,然后在编写它时,您可以使用 toByteArray 将字节直接写入二进制文件,而不是写一串文本。

【讨论】:

  • 我实际上使用了一个 BitSet 并且我序列化了 BitSet 的对象,它最终比我的实际输入更大。 toByteArray 会一样吗?
  • @rohitkrishna094 不,序列化的设计目的略有不同(存储数据以便可以自动转回对象)。如果直接写入字节,效率会高得多(因为只存储字节,而不是 BitSet 的内部参数/状态)
  • 哦,好的。谢谢,但你能给我一个链接或一个小代码 sn-p 来解释字节数组是如何工作的。
  • 基本思想是 bitset 也是一组 1010101010101 的,但存储在一个对象中,这样更容易编程。但是当您将其转换为字节时,您会将 8 位打包到每个字节中。所以当序列化为字节数组时,每个 8 个 1 或 0(java 中的字符串 16 个字节?)将变成只有 1 个字节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多