CodeGym
促銷
學習
課程
任務
問卷 & 測驗
遊戲
說明
行程
社群
用戶
論壇
聊天
文章
成功故事
動態
評價
訂閱
淺色主題

課程

  • 評論
  • 關於我們
開始
開始學習
立即開始學習
  • My Progress
  • Courses
  • 任務地圖
  • 課程
  • 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
學習
  • 註冊
  • Java 課程
  • 題目協助
  • 價格
  • Java 語法
社群
  • 用戶
  • 文章
  • 論壇
  • 聊天
  • 成功故事
  • 動態
  • 聯盟計畫
公司
  • 關於我們
  • 聯絡方式
  • 評價
  • 新聞中心
  • CodeGym for EDU
  • 常見問題
  • 支援
CodeGymCodeGym 是一門從零開始學習 Java 程式設計的線上課程。這門課程是初學者精通 Java 的完美方式。它包含超過 1200 題、具即時檢驗功能,以及涵蓋 Java 基礎理論的必要範圍。為了幫助你在學習上成功,我們實作了一系列激勵功能:測驗、程式專案、關於有效學習的內容,以及 Java 開發者職涯相關內容。
追蹤我們
介面語言
English Deutsch Español हिन्दी Français Português Polski বাংলা 简体中文 मराठी தமிழ் Italiano Bahasa Indonesia
繁體中文
Nederlands 日本語 한국어 Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский Vietnamese
"程式設計師是培養出來的,不是天生的" © 2026 CodeGym
MastercardVisa
"程式設計師是培養出來的,不是天生的" © 2026 CodeGym