HOWTO · Java

Java 读取二进制文件

本教程演示了如何在 Java 中读取具有不同类的二进制文件。

本页内容

尝试在软件中打开二进制文件可能会很困难,但我们可以使用 Java 读取二进制文件。本教程演示了在 Java 中读取二进制文件的不同方法。

在 Java 中使用 FileInputStream 读取二进制文件

使用 Java 中的 FileInputStream 类,我们可以轻松地读取 Java 中的二进制文件。

代码:

package Delfstack;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class Read_Binary {
  public static void main(String[] args) {
    try {
      // create a reader for data file
      FileInputStream read = new FileInputStream(new File("input.dat"));

      // the variable will be used to read one byte at a time
      int byt;
      while ((byt = read.read()) != -1) {
        System.out.print((char) byt);
      }

      read.close();

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

我们创建了一个 input.dat 二进制文件,然后尝试通过 Java 读取它。

输出:

default: (
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Test input.dat file from Delftstack
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% check = true
  check = false
)

上面的程序一次只读取一个字节,因此对于大型二进制文件可能需要更多时间。

在 Java 中使用 BufferedInputStream 读取二进制文件

如上所述,FileInputStream 一次只能读取一个字节,读取大文件可能需要更多时间。为了解决这个问题,我们使用了 BufferedInputStream 类。

BufferedInputStream 类一次将一组字节读取到数组缓冲区中。

代码:

package Delfstack;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class Read_Binary {
  public static void main(String[] args) {
    try {
      int Size_Buffer = 16 * 1024; // 16kb
      // create a reader for data file
      FileInputStream read = new FileInputStream(new File("input.dat"));
      BufferedInputStream buffered_reader = new BufferedInputStream(read, Size_Buffer);

      int byt;
      while ((byt = buffered_reader.read()) != -1) {
        System.out.print((char) byt);
      }

      buffered_reader.close();

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

默认内部缓冲区大小为 8 kb,可以通过将其作为参数传递给 BufferedInputStream 进行更改。

输出:

default: (
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Test input.dat file from Delftstack
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% check = true
  check = false
)

在 Java 中使用 InputStreamReader 读取二进制文件

InputStreamReader 用于读取编码与我们的操作系统不同的二进制文件。二进制文件的编码作为参数传递给 InputStreamReader

代码:

package Delfstack;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;

public class Read_Binary {
  public static void main(String[] args) {
    try {
      FileInputStream read = new FileInputStream(new File("input.dat"));

      // pass the UTF_8 character encoding
      InputStreamReader stream_reader = new InputStreamReader(read, StandardCharsets.UTF_8);

      int byt;
      while ((byt = stream_reader.read()) != -1) {
        System.out.print((char) byt);
      }

      stream_reader.close();

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

上面的代码可以读取具有特定编码的二进制文件。将该编码作为参数传递给 InputStreamReader

输出:

default: (
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Test input.dat file from Delftstack
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% check = true
  check = false
)