面试题答案
一键面试优化思路
- 使用唯一标识符:为对象分配唯一标识符,在序列化时记录已序列化对象的标识符,当再次遇到相同对象时,不再重复序列化,而是记录引用。
- 对象替换策略:利用
ObjectOutputStream
的enableReplaceObject
方法,在序列化前判断对象是否已被处理,若已处理则替换为引用形式。 - 自定义序列化:通过实现
writeObject
和readObject
方法,手动控制对象的序列化和反序列化过程,在其中加入处理重复对象的逻辑。
enableReplaceObject
方法的使用
- 启用替换功能:在
ObjectOutputStream
对象上调用enableReplaceObject(true)
开启对象替换功能。 - 实现替换逻辑:在需要序列化的类中重写
writeReplace
方法,在该方法中判断当前对象是否已被处理(例如通过维护一个已处理对象的集合),如果已处理,返回一个代表引用的对象(例如仅包含对象标识符的简单对象);如果未处理,返回this
。 - 反序列化处理:在反序列化时,对应的类要重写
readResolve
方法,用于将引用对象还原为实际对象。通过唯一标识符等信息从缓存中获取实际对象,若缓存中没有则重新构建对象。