我想知道是否可以一点一点地写入文件。我有写成字符串的位序列
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 编写为单个字符,而不是将其编写为二进制表示的字符串。