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 應用程式中的檔案資料。

更新於: 2023年7月28日

254 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.