Java将字节写入.txt文件

时间:2016-05-06 10:30:13

标签: java string encoding byte huffman-code

我在编程课上练习霍夫曼编码。我已经完成了几乎所有的编码部分。例如,我为每个字符分配了一个代码(即a = 100100),并根据它的代码转换文本中的每个字符。然后我将每个代码解析为Byte列表,就像将100100解析为Byte并将其存储到List中一样。但是,我需要将所有字节写入.txt文件。我意识到有一个问题。

示例:一个字符的代码为" 1001"它将作为1个字节而不是4个字节写入.txt文件。

我知道在霍夫曼编码之后,字符以如下格式存储: " 11100111101011111101011011111000010000101" 但现在我的情况是每个字符占用1个字节的大小,在编码之前与原始输入文件的大小没有差别。

有没有办法以" 11100111101011111101011011111000010000101"等格式存储代码?

对不起我的英语,我尽力解释我的困惑。

2 个答案:

答案 0 :(得分:0)

try (FileWriter fw = new FileWriter("out.txt")) {
    try (BufferedWriter bfw = new BufferedWriter(fw)) {
        char[] buffer = str.toCharArray();
        for (int i = 0; i < buffer.length; i++) {
            bfw.write(Integer.valueOf(Byte.valueOf((byte) buffer[i]).intValue()).toBinaryString());
        }       
    }
}

答案 1 :(得分:0)

如果您打算将所有位保留在内存中,则可以使用BitSet bits = new BitSet(); bits.set(7000, true); if (bits.get(7000)) { ... } byte[] bytes = bits.toByteArray(); Path path = Paths.get("C:/Temp/huffman.bin"); Files.writeBytes(path, bytes); 对象。

{{1}}

立即使用字节是可行的。

但你不能写字母;有一种转变会让事情变得混乱。 Mind char是16位UTF-16格式,包含Unicode。

这会写二进制数据,而不是文本。

对于尾随比特,我不知道霍夫曼如何处理这个问题,做一些研究;我认为位0将会产生并且不会产生伪像。也许添加前0-7位较长的代码。 填充是关键词。