如何在 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
}
}
}

但结果是,输出字节始终为 0。

我希望我更清楚了

你不能写小于一个字节,你的文件是 8 字节的原因是因为你在其中写入了 8 个字符。如果您有Writer并执行以下操作:

writer.write(0b00101101)

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

最新更新