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
)