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
)