AI Academy
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
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.