促銷
學習
課程
任務
問卷 & 測驗
遊戲
說明
行程
社群
用戶
論壇
聊天
文章
成功故事
動態
評價
訂閱
淺色主題
課程
評論
關於我們
開始
開始學習
立即開始學習
My Progress
Courses
任務地圖
課程
Java 25
所有任務
所有等級
Externalizable:序列化的精細調校
JAVA 25 SELF
等級 43,
課程 2
擴充 Java 的基本序列化:當
Serializable
的自動化機制不夠用時,可以改用手動的
Externalizable
合約,搭配
writeExternal
/
readExternal
方法。在本講解中,我們會說明如何完全控制資料格式、縮小檔案大小並維持向後相容性,並與
ObjectOutputStream
/
ObjectInputStream
流比較,展示範例、優缺點與常見錯誤(必須的
public
無參數建構子、寫入/讀取順序等)。
調整序列化行為:自訂方法
JAVA 25 SELF
等級 43,
課程 3
在本講座中,我們說明如何藉由方法
writeReplace
與
readResolve
影響 Java 的序列化與反序列化流程:為什麼要以代理物件取代原物件、如何維持單例、如何處理不可變物件,以及這與
writeObject
/
readObject
的關係。逐步實作、流程圖(Mermaid)與常見錯誤解析。
序列化安全:最佳實務
JAVA 25 SELF
等級 43,
課程 4
Java 安全序列化實用指南:為何來自不受信任來源的反序列化很危險、如何使用
ObjectInputFilter
、關鍵字
transient
、明確指定
serialVersionUID
、透過
instanceof
進行型別檢查,以及替代的交換格式(JSON/Proto)來防護。內文—直觀的程式碼範例、允許類別的過濾,以及對常見錯誤的解析。
巢狀物件的序列化:特點
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
)。
二進位序列化的問題:安全性、相容性
JAVA 25 SELF
等級 45,
課程 0
本講座解析 Java 中二進位序列化的風險:為何從不受信任來源進行反序列化很危險(「gadget chain」鏈、RCE)、像
readObject
與
readResolve
等特殊方法有何風險,以及如何防護(白名單 whitelisting、改用
JSON
/
XML
、較安全的函式庫如
Jackson
)。並詳述類別版本相容性與
serialVersionUID
欄位的角色、遇到
InvalidClassException
時的行為、
transient
/
static
的限制、效能,以及最佳實務與常見錯誤。
泛型集合的序列化:特性與注意事項
JAVA 25 SELF
等級 45,
課程 1
說明型別擦除(
type erasure
)如何影響泛型集合的序列化:為什麼在執行期
List<String>
與
List<Integer>
都是同一個
ArrayList
、透過
ObjectOutputStream
/
ObjectInputStream
寫入與讀取的究竟是什麼、
ClassCastException
與針對
unchecked
轉型的警告從何而來。會展示巢狀集合、
Map
/
Set
的示例,提及
Gson
/
Jackson
,並整理安全反序列化的實務做法。
序列化中的相容性與向後相容性(backward compatibility)
JAVA 25 SELF
等級 45,
課程 2
我們來解析如何演進可序列化的類別而不破壞資料:為何要固定
serialVersionUID
、JVM 如何檢查相容性、哪些變更是安全的(新增/移除欄位),哪些是關鍵且危險的(變更型別、將類別移到不同套件)。我們會展示
transient
/
static
的角色、透過
writeObject
/
readObject
進行自訂序列化的技巧、二進位序列化與 XML/JSON 的差異、確保相容性的策略與常見錯誤(例如,
InvalidClassException
)。
序列化資料的遷移與版本控管
JAVA 25 SELF
等級 45,
課程 3
如何在生產環境中安全地演進可序列化的類別:變更欄位與型別會發生什麼事,類別版本如何透過
serialVersionUID
運作,什麼時候該變更、什麼時候保持不變,如何透過
readObject
/
readFields
進行「延遲」遷移與「就地」(in-place)轉換,以及有哪些進階技巧,例如
ObjectInputStream.readClassDescriptor()
。我們將拆解一個包含兩個類別版本與典型錯誤的完整實戰情境,包含
InvalidClassException
的陷阱。
顯示更多
1
...
19
20
21
22
23
...
30
Please enable JavaScript to continue using this application.