Serializable
介面是Java中用於支援物件序列化的標準標記介面,它沒有定義任何方法和屬性。一個類只要實現了 java.io.Serializable
介面,就表明該類的物件可以被轉換為一系列的位元組,這些位元組可以儲存在磁碟上或透過網路傳輸,之後再將這些位元組還原為原來的物件,這一過程即為序列化與反序列化。
序列化的作用主要有以下幾點:
-
持久化儲存:
- 將物件的狀態資訊轉化為位元組流,進而將物件狀態資料儲存到檔案或其他儲存介質中,以便在系統重啟後重新讀取並恢復物件狀態。
-
遠端通訊:
- 在分散式系統或RMI(Remote Method Invocation)等場景下,需要透過網路將物件從一臺機器傳送到另一臺機器時,物件必須是可序列化的。
-
快取機制:
- 物件可以透過序列化進行臨時或長期快取,提高系統的響應速度。
-
執行緒間通訊:
- 在某些併發環境下,物件也可以透過序列化的方式在不同的執行緒間傳遞資料。
-
備份與恢復:
- 應用程式可能需要對複雜物件進行備份,以防止資料丟失,序列化提供了方便的資料格式轉換功能。
關於序列化欄位的選擇:
- 預設情況下,非靜態(non-static)和非瞬態(non-transient)的欄位會被序列化。
- 如果不希望某個欄位參與序列化過程,可以使用
transient
關鍵字修飾該欄位。
此外,為了確保不同版本的類在序列化和反序列化過程中相容,可以宣告一個 serialVersionUID
靜態常量來控制版本的一致性檢查。當類結構發生變化時,如果未指定或者改變這個序列化版本號,可能會導致反序列化失敗或產生意外的結果。