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
)