Java 读取二进制文件

Sheeraz Gul 2023年1月30日 2022年4月27日
  1. 在 Java 中使用 FileInputStream 读取二进制文件
  2. 在 Java 中使用 BufferedInputStream 读取二进制文件
  3. 在 Java 中使用 InputStreamReader 读取二进制文件
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
)
Author: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

相关文章 - Java Binary