java - 如何在二进制文件中写入一字节值-java

标签 java readfile writetofile

我尝试了很多方法来编写一个程序:按原样在文件中写入一个字节值..例如在文件中写入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”的问题在于 01010101octal 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/

相关文章:

java - Branch And Bound 在 OptaPlanner 中不起作用

java - 在java中读取具有多个分隔符的文件行

cocoa - 加密数据未写入文件?

ios - 为什么我的 .plist 没有显示保存的数据?

java - 序列化包含对象 ArrayList 的对象

java - 为什么有前缀/后缀++而没有前缀/后缀+=?

java - 未使用 firebase 数据库访问调用 onChange 方法

php - 获取文件的详细信息然后插入到数据库

javascript - NodeJS readFile() 检索文件名