所有类都有相同的串行版本ID?

Java规范统计了这一点

序列化运行时与每个可序列化类关联一个称为serialVersionUID的版本号,在反序列化过程中使用该版本号来验证序列化对象的发送者和接收者是否已加载该对象的与序列化相容的类。 如果接收者已经为与对应的发送者类具有不同serialVersionUID的对象加载了类,则反序列化将导致InvalidClassException。 enter code here

但是,如果我将所有类的相同序列版本ID分配如下

static final long serialVersionUID = 1L;

现在我所有的类都有相同的serialversionUID,并且这绝不会导致InvalidclassException。

我知道我们明确地给它,以便它的值在不同的JVM实现中保持不变。

请让我知道在所有类中放置相同的id有什么用处,以及如果我们在序列化和反序列化之间修改类会发生什么?


我相信serialVersionUID仅用于确定已序列化的类的版本 - 类名始终存在,因此不会导致任何歧义。

请让我知道在所有课程中使用相同的id有什么用处

他们实际上是无关的价值。 使用1很简单,每次进行重大更改时都会增加它。

如果我们在序列化和反序列化之间修改类会发生什么?

这完全取决于您所做的修改类型。 如果你只是添加或删除方法,或静态字段,这很好 - 这不会影响序列化的数据。 如果你对实例字段进行了修改,那就是当生活变得多毛的时候。 您需要详细研究序列化格式以准确计算出构成重大更改的内容,但完全有可能只更改字段的名称可能会破坏事情 - 例如,如果按名称顺序对字段进行序列化。

您可能需要考虑使用二进制数据格式,该格式可以更愉快地进行数据格式更改,例如协议缓冲区。 (还有其他的好处,比如便携性和速度 - 而protobuf也不是城里唯一的游戏。)

链接地址: http://www.djcxy.com/p/23869.html

上一篇: Same Serial version id for all the classes?

下一篇: why user defined serialVersionUID is not used while desialization?