用JAVA读取二进制文件

Posted

技术标签:

【中文标题】用JAVA读取二进制文件【英文标题】:Reading Binary file's in JAVA 【发布时间】:2021-07-26 17:56:41 【问题描述】:

好的,所以我正在学习用 java 编写和读取二进制文件,这是我在谷歌的任何地方都得到建议的方法 这是加权类

    public Writer(String fileName, String text) throws IOException 
        ObjectOutputStream output = null;
        try
            output = new ObjectOutputStream(new FileOutputStream(fileName, true));
         catch (FileNotFoundException e) 
            System.out.println("File not found!");
            System.exit(0);
         catch (IOException e) 
            System.out.println("IO Exception!!");
            System.exit(0);
        //THE TEXT HERE IS "test"
        output.writeChars(text);
        output.close();
        System.out.println("Successful writing!");
    

这是阅读课

    public Reader(String fileName) throws IOException 
         ObjectInputStream in = null;
         try 
             in = new ObjectInputStream(new FileInputStream(fileName));
          catch (FileNotFoundException e) 
             System.out.println("File Not found!");
             System.exit(0);
          catch (IOException e) 
             System.out.println("IO Exception!!");
             System.exit(0);
         
         int i;
         while ((i = in.read()) != -1)
             System.out.print((char) i);
         
         in.close();
    

但是我的输出是 t e s t "There are squares in between each char"

【问题讨论】:

您使用writeChars 写入字符,因此您应该使用readChar() 再次读取它们。方块可能是 \0 (NUL) 字符,由每个字符写入 2 个字节引起。 你正在读取字节;字符不是字节。这就是为什么有不同的方法来读取“二进制”数据和“文本”数据的原因之一。 ObjectInput/OutputStream 用于java对象,也存储类信息。对于二进制数据 Input/OutputStream 就足够了。对于结构化二进制数据,可以使用 ByteBuffer 或 DataInput/OutputStream。 @JoopEggen 能否给个代码示例 【参考方案1】:

对于二进制、非文本文件,DataInputStream/DataOutputStream 更清晰。

try (FileOutputStream fos = new FileOutputStream("test.bin");
        DataOutputStream dos = new DataOutputStream(fos)) 
    dos.writeUTF8("La projekto celas ŝtopi breĉojn en Vikipedio");
    dos.writeInt(42);
    dos.writeDouble(Math.PI);


try (FileInputStream fis = new FileInputStream("test.bin");
        DataInputStream dis = new DataInputStream(fis)) 
    String s = dis.readUTF8(); // "La projekto celas ŝtopi breĉojn en Vikipedio"
    int n = dis.readInt(); // 42
    double pi = dis.readDouble() // Math.PI

writeUTF8 写入一个长度和一个 UTF-8 编码的字符串。 Unicode 格式,因此可以编写任何脚本。可以混合使用日语、希腊语、表情符号和保加利亚语。

【讨论】:

以上是关于用JAVA读取二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

如何实现用java语言读取二进制文件的内容解析后存储在链表里

用JAVA读取二进制文件

怎样用Java读写二进制文件

用 Java 读取大文件

我怎样才能使它如此这个java程序将读取二进制文件的其余部分,而不是添加额外的空格?

barnyard2怎么读取snort的二进制文件