AI Academy
促銷
CodeGym University
學習
課程
任務
問卷 & 測驗
遊戲
說明
行程
社群
用戶
論壇
聊天
文章
成功故事
動態
評價
訂閱
淺色主題
課程
評論
關於我們
開始
開始學習
立即開始學習
My Progress
Courses
任務地圖
課程
Java 25
Java 25
等級 44
巢狀物件的序列化:特點
JAVA 25 SELF
等級 44,
課程 0
在本講座中,我們將說明 Java 如何對物件圖執行深度序列化:引用欄位會發生什麼事、為什麼所有巢狀物件都必須實作
Serializable
、如何避免
NotSerializableException
,以及在哪些情況下
transient
修飾詞能派上用場。我們將以範例示範含巢狀結構、集合以及循環參照的物件之序列化/反序列化,並解析與
serialVersionUID
以及大型物件圖相關的常見錯誤。
巢狀與階層式物件:物件圖的序列化
JAVA 25 SELF
等級 44,
課程 1
Java 如何序列化複雜的資料結構:從巢狀的集合與繼承階層到循環的物件圖。我們將說明為什麼
Map<String, List<Book>>
的序列化可行、在
List<Animal>
中如何保留實際的子類型、遇到循環時參照機制如何運作,以及常見的陷阱。我們也會談到
ObjectOutputStream
/
ObjectInputStream
的角色、
writeObject
/
readObject
方法、
serialVersionUID
欄位與
transient
修飾詞。
循環參照的問題:偵測與處理
JAVA 25 SELF
等級 44,
課程 2
說明什麼是物件圖中的循環參照、它們為何對序列化有風險,以及如何應對。展示 Java 標準串流 —
ObjectOutputStream
/
ObjectInputStream
— 如何自動追蹤已遇到的物件並寫入引用(handles),避免
StackOverflowError
。也會解析自訂序列化(
writeObject
/
readObject
、
defaultWriteObject
/
defaultReadObject
)的陷阱,以及在 JSON 中處理循環的策略:註解
@JsonIdentityInfo
、
@JsonBackReference
/
@JsonManagedReference
,透過
transient
排除欄位,以及使用識別碼。
二進位序列化中的物件同一性
JAVA 25 SELF
等級 44,
課程 3
Java 如何在二進位序列化時保留並恢復物件的同一性:為什麼透過
a
.
equals
(
b
) 的等價性不等於同一性(
a
==
b
),
ObjectOutputStream
/
ObjectInputStream
如何追蹤物件圖,並寫入「重複引用」而不是重複物件,為何在循環引用時仍能正確運作,以及
writeReplace()
與
readResolve()
如何影響最終的同一性。搭配範例解析:循環、共享引用、實作與常見錯誤。
解析集合序列化的常見錯誤
JAVA 25 SELF
等級 44,
課程 4
在本講座中,我們會剖析序列化集合時最常見的問題:從
java.io.NotSerializableException
(當元素未實作
Serializable
)與泛型陷阱導致的
ClassCastException
,到因
serialVersionUID
造成的類別版本不相容。我們也會談到不可變集合的細節(
List.of()
、
Set.of()
、
Map.of()
)、
transient
/
static
欄位的行為,以及關於效能與檔案大小的議題,其中串流式寫入與壓縮(
GZIPOutputStream
)能派上用場。你將獲得實用建議、程式碼範例,以及關於安全反序列化的建議(
readObject
/
writeObject
)。
Please enable JavaScript to continue using this application.