我尝试了很多方法来编写一个程序:按原样在文件中写入一个字节值..例如在文件中写入01010101..然后我想读取该文件并打印我的内容所以它应该显示 01010101。我的代码都没有这样工作。有什么帮助吗? 因为我正在编写一个压缩程序,所以必须是 1 字节而不是 8
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.File;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main2 {
public static void main(String[] args) throws Exception {
DataOutputStream dos = new DataOutputStream(new FileOutputStream("Text.t"));
dos.writeBytes(String.valueOf(01010101));
File file = new File("Text.t");
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(file)));
System.out.println(br.readLine());
dos.close();
br.close();
}
}
它适用于以 1 开头但以 0 开头的二进制代码。例如,对于 01010101,它显示 266305
最佳答案
“它适用于以 1 开头但以 0 开头的二进制代码则不然。例如,对于 01010101,它显示 266305”的问题在于 01010101
是 octal literal并被编译器读入 base-8 (aka Octal) .
在编写文字时使用1010101
- 前导零对数字没有任何意义;但它们确实对 Java 代码的解析方式有意义!
显示为“00xyz”的十进制数通常是 zero-padded ,应用于字符串表示;数字本身是 xyz。
<小时/>从评论中我相信所需的操作是使用 binary literal 。你必须使用 "bit converter" 来发出它按预期显示 - 位转换器将采用例如的值。 0b11
(整数3)并将其转换为字符串“11”。您可能还想应用具有假定输出宽度的填充 - 同样,0b01 == 0b1
并且前导 0 对整数没有任何意义。
以下内容将发出霍夫曼位序列的十进制字符串表示形式,不带任何前导零。然而,当与上述配对时,这应该会让您走上正确的轨道。
dos.writeBytes(String.valueOf(0b01001010));
关于java - 如何在二进制文件中写入一字节值-java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27864258/