在本節中,我們將詳細討論Java中的物件序列化與反序列化概念、使用方法以及實體,物件序列化是將物件的狀態資訊轉換為位元組流的程序,而反序列化則相反,是將位元組流恢復為物件的程序,
4.4.1 為什么需要物件序列化?
物件序列化的主要目的是為了在不同的系統間傳輸物件,或者將物件持久化到磁盤檔案中,通過序列化和反序列化,我們可以輕松地將物件的狀態資訊存盤到檔案中或通過網路發送給其他系統,而無需關心物件內部的具體實作細節,
4.4.2 如何實作物件序列化?
要實作物件序列化,我們需要滿足以下條件:
- 實作
java.io.Serializable介面,這個介面是一個標記介面,沒有任何方法,只是用來告訴Java虛擬機這個類可以被序列化, - 確保類中的所有欄位都是可序列化的,如果類中有不需要序列化的欄位,可以使用
transient關鍵字修飾,這樣在序列化程序中這些欄位將被忽略,
4.4.3 使用ObjectOutputStream和ObjectInputStream進行序列化與反序列化
Java提供了ObjectOutputStream和ObjectInputStream這兩個類來實作物件的序列化與反序列化,它們分別繼承自OutputStream和InputStream,可以方便地將物件寫入到檔案或從檔案中讀取物件,
4.4.3.1 示例:序列化一個物件到檔案
假設我們有一個Person類,需要將其物件序列化到檔案中:
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
我們可以使用ObjectOutputStream將Person物件序列化到檔案:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class SerializationExample {
public static void main(String[] args) {
try {
FileOutputStream fos = new FileOutputStream("person.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
Person person = new Person("Alice", 30);
oos.writeObject(person);
oos.close();
fos.close();
System.out.println("Person物件已序列化到檔案中");
} catch (IOException e) {
e.printStackTrace();
}
}
}
4.4.3.2 示例:從檔案中反序列化一個物件
接下來,我們可以使用ObjectInputStream從檔案中反序列化Person物件:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class DeserializationExample {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("person.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
Person person = (Person) ois.readObject();
ois.close();
fis.close();
System.out.println("從檔案中反序列化Person物件:");
System.out.println(person);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
4.4.4 小結
通過本節的學習,我們了解了物件序列化與反序列化的概念、作用以及如何使用ObjectOutputStream和ObjectInputStream進行序列化與反序列化,物件序列化是一種非常實用的技術,可以幫助我們輕松地傳輸物件和持久化物件狀態,
請務必掌握以下重點:
- 物件序列化的作用:將物件的狀態資訊轉換為位元組流2. 實作物件序列化的條件:實作
Serializable介面,確保類中的所有欄位都是可序列化的, - 使用
transient關鍵字修飾不需要序列化的欄位, - 使用
ObjectOutputStream和ObjectInputStream進行物件的序列化與反序列化,
練習:嘗試創建一個包含多個欄位(例如,姓名、年齡、性別、職業等)的Person類,并進行序列化與反序列化操作,還可以嘗試序列化與反序列化一個包含多個Person物件的集合,以加深理解,
推薦閱讀:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/553963.html
標籤:其他
上一篇:百度飛槳(PaddlePaddle) - PP-OCRv3 文字檢測識別系統 基于 Paddle Serving快速使用(服務化部署 - CentOS 7)
下一篇:返回列表
