繁体   English   中英

如何在 Java 中的文件中写入单个位

[英]How to write a single bit in a file in Java

我想知道是否可以一点一点地写入文件。 我有几个写为字符串的位序列

String bitString = "00101101"; // as an example for just one sequence

当我尝试将这个序列写入文件 (txt) 时,它没有给我预期的结果。 我的文件有 8 个字节,我希望它只有 1 个字节(8 位:我的00101101 )。

所以我的问题是:从字符串或整数在文件中直接写入二进制文件的最简单方法是什么?

提前致谢。

编辑

我发展我的问题:

我有一个从输入文件(任何文本文件,所以我不知道它是什么字符串)中读取的输入字符串,让我们以“ Hello World ”为例。

我正在使用我创建的使用 HuffMan 树方法的文本压缩算法。 对于我的示例,它返回与我的文本相对应的位序列(这是为了解释,我们并不真正需要这部分),它给了我以下位序列: 00001100 11011011 10000101 11101011比原来更轻我的文本的二进制值(原始文本为 11 个字节,压缩后为 4 个字节)。

我想要做的是在输出文件中写入这个新序列,我希望每个字符都被视为一个位(或每 8 个字符被视为一个字节),因此,输出文件应该是比我的输入文件轻。

但问题是,当我尝试编写新序列时,每个字符都被视为一个字节而不是一个位,并且输出文件比输入文件重。

我已经尝试了很多东西,例如 FileOutputStream、OutputStream、将字符串转换为字节、转换为整数……

这是我想要做的:

String optimizedString = "00001100110110111000010111101011";  // size always multiple of 8
byte outputByte = 0;
try (OutputStream fos = new FileOutputStream("textCompressed.txt")) {           
    for (int i = 0; i < optimizedString.length(); ++i) {
        if (optimizedString.charAt(i) == '1') {
            outputByte = (byte) (outputByte << 1 + 1); // add 1 to the sequence
        } else {
            outputByte = (byte) (outputByte << 1 + 0); // add 0 to the sequence
        }

        if ((i+1) % 8 == 0) { // print each byte in the output file
            fos.write(outputByte);
            outputByte = 0; // reset the byte for the next sequence
        }
     }
}

但结果是 outputByte 始终为 0。

我希望我已经更清楚了

你不能写少于一个字节,你的文件之所以是 8 个字节是因为你向它写了 8 个字符。 如果您有Writer并执行以下操作:

writer.write(0b00101101)

它会做你想做的。 基本上,它使用二进制表示法来定义一个int并将这个 int 写为单个字符,而不是将其写为二进制表示的字符串。

暂无
暂无

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

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