在 Java 中,物件序列化將物件轉換為位元組流,反序列化則將位元組流還原為物件。序列化需要實作 Serializable 接口,準備物件並使用 ObjectOutputStream 寫入資料;反序列化則使用 ObjectInputStream 讀取資料並重建物件。例如,程式碼中序列化了一個具有 name 和 age 屬性的 Person 對象,並從檔案中反序列化以列印資訊。
序列化是一種將物件轉換為位元組流並將其儲存在文件中或網路上的過程。反序列化則是將儲存的位元組流重新轉換為原始物件的相反過程。 Java 中物件序列化的核心介面是 Serializable
。
1. 實作 Serializable
介面: 類別必須實作 Serializable
介面才能進行序列化。
2. 準備物件: 要序列化的物件必須實作 writeObject
方法,該方法將物件的欄位寫入輸出流。如果物件包含其他可序列化的對象,則 writeObject
方法也需要呼叫這些物件的 writeObject
方法。
3. 建立 ObjectOutputStream
: 使用 ObjectOutputStream
將物件寫入輸出流。
4. 編寫物件: 呼叫 writeObject
方法將物件寫入輸出流。
1. 建立 ObjectInputStream
: 使用 ObjectInputStream
從輸入流讀取物件。
2. 讀取物件: 呼叫 readObject
方法從輸入流讀取物件。如果物件包含其他可序列化的對象,則 readObject
方法也會呼叫這些物件的 readObject
方法。
3. 重構物件: 從輸入流讀取所有資料後,將使用反射機制重構物件。
以下程式碼範例示範如何在 Java 中序列化和反序列化物件:
import java.io.*; public class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public void writeObject(ObjectOutputStream out) throws IOException { out.writeObject(name); out.writeInt(age); } @Override public void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { name = (String) in.readObject(); age = in.readInt(); } public static void main(String[] args) { try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.ser"))) { Person person = new Person("John", 30); out.writeObject(person); } catch (IOException e) { e.printStackTrace(); } try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("person.ser"))) { Person person = (Person) in.readObject(); System.out.println(person.name + ", " + person.age); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
以上是Java中物件的序列化的過程是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!