CodeGym
促销
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题

课时

  • 评论
  • 关于我们
开始
开始学习
立即开始学习
  • 我的进度
  • 课程
  • 任务地图
  • 课程
  • Externalizable:序列化的精细化定制

    JAVA 25 SELF
    等级 43,课时 2
    在 Java 中扩展基础序列化:当内置的 Serializable 不够用时,可以借助手动契约 Externalizable 及其 writeExternal/ readExternal 方法。本讲将讲解如何完全控制数据格式、减小文件大小并保持向后兼容,对比 ObjectOutputStream/ ObjectInputStream 流的行为,给出示例、优缺点与常见陷阱(必须提供 public 无参构造器、严格的写入/读取顺序等)。
    可用
  • 配置序列化行为:自定义方法

    JAVA 25 SELF
    等级 43,课时 3
    本讲解读如何通过方法 writeReplace 和 readResolve 影响 Java 中的序列化与反序列化过程:为何要将对象替换为代理、如何保持单例、如何处理不可变对象,以及这与 writeObject/ readObject 的关系。包含循序渐进的实操、操作流程图与典型错误解析。
    可用
  • 序列化安全:最佳实践

    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 这样的特殊方法会带来什么威胁,以及如何进行防护(白名单、放弃转用 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
Learn
  • 注册
  • Java 课程
  • 任务帮助
  • 定价
  • Java 语法
社区
  • 用户
  • 文章
  • 论坛
  • 聊天
  • 成功故事
  • 动态
  • 联盟计划
Company
  • 关于我们
  • 联系方式
  • 评价
  • 媒体中心
  • 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