我什么时候应该更换SerialUID?

时间:2010-11-09 08:14:46

标签: java serialization

我有一堆序列化的类。通常我已经为所有这些生成了串行UID,因为Java规则相当严格,并且基本上可以重新创建序列号。但这引出了一个问题,即我无法在互联网上找到答案:

什么时候打破向后兼容性并手动更改类中的串行版本UID才有意义?

3 个答案:

答案 0 :(得分:3)

从不。您应该自己组织,以便类在其整个生命周期中具有相同的serialVersionUID。你应该(a)抵制序列化 - 与班级不相容的变化; (b)编写自己的readObject()/ writeObject()/ readResolve()/ writeReplace()对象,以保留初始序列化格式,并在类的生命周期开始时定义一个显式的serialVersionUID。当你改变这个值时,你的手上就会出现巨大的头痛。计划避免它。

答案 1 :(得分:3)

答案 2 :(得分:2)

来自the JavaDoc of the Serializable interface

  

序列化运行时将每个可序列化类与版本号相关联,称为serialVersionUID,在反序列化期间使用该版本号来验证序列化对象的发送方和接收方是否已加载兼容的对象的类。序列

我认为这是一个很好的提示来回答你的问题:一旦你以某种方式更改类,那序列化就会受到影响(比如添加/删除/更改序列化的类成员),那么你真的应该改变它的值serialVersionUID