[英]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.