Java 中 FileInputStream 和 ObjectInputStream 的區別
在 Java 中處理檔案時,可以使用不同的類來讀取檔案中的資訊。兩個常用的類是 FileInputStream 和 ObjectInputStream。雖然這兩個類都用於從檔案中讀取資訊,但它們在方法和功能上有所不同。在本文中,我們將探討 FileInputStream 和 ObjectInputStream 之間的區別,並瞭解何時使用它們。
語法
在深入瞭解差異之前,讓我們先了解 FileInputStream 和 ObjectInputStream 的語法:
FileInputStream 語法
FileInputStream fis = new FileInputStream("file.txt");
ObjectInputStream 語法
FileInputStream fis = new FileInputStream("file.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
語法解釋
FileInputStream 類能夠從檔案中讀取原始位元組。它接受檔名或檔案描述符作為引數,並開啟一個用於讀取的流。另一方面,ObjectInputStream 是一個更高級別的類,它擴充套件了 FileInputStream。它提供了額外的功能,可以從檔案中讀取序列化物件。要使用 ObjectInputStream,我們首先需要建立一個 FileInputStream 例項,然後將其作為引數傳遞給 ObjectInputStream 建構函式。
方法 1:FileInputStream
FileInputStream 類在位元組級別工作,主要用於從檔案中讀取原始資料。它提供了一個可以連續讀取的位元組流。讓我們詳細瞭解該方法:
演算法
透過提供檔名或檔案描述符建立 FileInputStream 例項。
建立一個緩衝區或位元組陣列來儲存從檔案中讀取的資料。
使用 FileInputStream 的 read() 方法將檔案中的資料讀取到緩衝區中。
根據需要處理緩衝區中的資料。
示例
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamExample {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("file.txt");
byte[] buffer = new byte[1024];
int bytesRead = fis.read(buffer);
while (bytesRead != -1) {
// Process the data from the buffer
System.out.println(new String(buffer, 0, bytesRead));
bytesRead = fis.read(buffer);
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
輸出
This is an example text file. It contains some sample data to demonstrate the usage of FileInputStream.
在此程式碼示例中,我們使用檔名“file.txt”建立了一個 FileInputStream 例項。我們還建立了一個名為“buffer”的位元組陣列來儲存從檔案中讀取的資料。在 while 迴圈中,我們使用 FileInputStream 的 read() 方法將檔案中的資料讀取到緩衝區中。然後,我們處理緩衝區中的資料,在本例中,只是將其列印到控制檯。迴圈持續進行,直到 read() 方法返回 -1,表示檔案結束。最後,我們關閉 FileInputStream 以釋放系統資源。
方法 2:ObjectInputStream
ObjectInputStream 類用於從檔案中讀取序列化物件。它提供了更高級別的功能來處理物件序列化和反序列化。讓我們探索該方法:
演算法
透過提供檔名或檔案描述符建立 FileInputStream 例項。
透過將 FileInputStream 例項作為引數建立 ObjectInputStream 例項。
使用 ObjectInputStream 的 readObject() 方法從檔案中讀取序列化物件。
根據需要處理物件。
示例
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class ObjectInputStreamExample {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("file.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
Object obj = ois.readObject();
// Process the object as required
System.out.println(obj.toString());
ois.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
輸出
This is an example text file. It contains some sample data to demonstrate the use of FileInputStream.
在此程式碼示例中,我們使用檔名“file.txt”建立了一個 FileInputStream 例項。然後,我們透過將 FileInputStream 例項作為引數建立了一個 ObjectInputStream 例項。使用 ObjectInputStream 的 readObject() 方法,我們從檔案中讀取了序列化物件。然後,我們可以根據需要處理該物件。在本例中,我們只是使用 toString() 方法將物件列印到控制檯。最後,我們關閉 ObjectInputStream 以釋放系統資源。
Java 中 FileInputStream 和 ObjectInputStream 的區別
區別 |
FileInputStream |
ObjectInputStream |
|---|---|---|
用途 |
用於從檔案中讀取原始位元組。 |
用於從檔案中讀取序列化物件。 |
流型別 |
在位元組級別操作,提供一個位元組流。 |
擴充套件 FileInputStream 的更高級別類。 |
資料處理 |
需要額外的處理才能將位元組轉換為所需的資料型別。 |
自動處理物件序列化和反序列化。 |
與非序列化資料的使用 |
適用於從檔案中讀取任何型別的資料。 |
不適合讀取非序列化資料。 |
依賴項 |
直接依賴於 FileInputStream 類。 |
擴充套件 FileInputStream 類以獲得額外的功能。 |
結論
總而言之,Java 中的 FileInputStream 和 ObjectInputStream 類提供了不同的方法來從檔案中讀取資訊。FileInputStream 用於讀取原始位元組,而 ObjectInputStream 用於讀取序列化物件。瞭解這些類之間的區別及其特定的用例對於在 Java 中有效地進行檔案處理至關重要。透過根據您的需求使用合適的類,您可以成功地讀取和處理 Java 應用程式中的檔案資料。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP