繁体   English   中英

Java将字节写入.txt文件

[英]Java writing byte into a .txt file

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

示例:一个字符的代码为“ 1001”,它将以1字节而不是4位的形式写入.txt文件。

我知道在霍夫曼编码后,字符以以下格式存储:“ 11100111101011111101101011011111000010000101”,但是现在我的情况是每个字符都占用1个字节的大小,该大小与编码之前的原始输入文件没有什么不同。

有什么方法可以将代码存储为“ 11100111101011011111101011011111000010000101”这样的格式?

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

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());
        }       
    }
}

如果打算将所有位保留在内存中,则可以使用BitSet对象。

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);

立即使用字节是可行的。

但是你不能写char的。 有一个转换使事情变得混乱。 介意char是16位UTF-16格式,包含Unicode。

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

对于尾随的位,我不知道霍夫曼是如何处理的,请进行一些研究。 我认为位0将起作用并且不会产生伪像。 也许添加较长代码的前0-7位。 填充是关键词。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM