java 序列化uid的作用

探讨UID在序列化与反序列化过程中对Serializable与Externalizable接口实现类的兼容性影响,尤其是在字段增删情况下的表现差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建议指定UID,因为UID可以帮助你实现新老版本的兼容性。

A、对于实现Serializable接口的实现类:

参考:https://www.cnblogs.com/duanxz/p/3511695.html

假设:序列化之前为A类,经过序列化、反序列化为B类,指定uid,保持不变。

case1:A类B类完全一样,序列化、反序列化成功

case2:A类不变,序列化,B类增加字段,反序列化后,B类新增的字段为默认值

case3:A类不变,序列化,B类减少字段,反序列化   成功   A类比B类多的字段被忽略

B、对于实现Externalizable的接口

假设:序列化之前为A类,经过序列化、反序列化为B类,指定uid,保持不变。

case1:A类B类完全一样,序列化、反序列化成功

case2:A类不变,序列化,B类增加字段,反序列化后,B类新增的字段readObject时报错,这是与上面不同的地方

case3:A类不变,序列化,B类减少字段,反序列化   成功   A类比B类多的字段被忽略

 

uid可以解决A场景下兼容性问题, 对于B场景只能解决一部分,

网上大部分材料都是描述场景A的,对于场景B中的case2不知道有什么解决办法没?

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值