SerialVersionUID Java - SerialVersionUID 如何工作? [复制]

Posted

技术标签:

【中文标题】SerialVersionUID Java - SerialVersionUID 如何工作? [复制]【英文标题】:SerialVersion UID Java - How SerialVersionUID work? [duplicate] 【发布时间】:2017-06-01 06:14:33 【问题描述】:

您好,我有一个关于 Java 中 SerialVersionUID 的问题。 如果我为class A 生成SerialVersionUIDA 的 2 个实例具有相同的 SerialVersion 关于类和对象的另一个唯一序列,关于 object1object2 不同?或者怎么做? 不明白,请回复我。谢谢。

【问题讨论】:

SerialVersionUID 是一个静态字段,因此它“属于”类,而不是任何实例。 【参考方案1】:

    serialVersionUID 用于对象的版本控制。

    如果我们没有在类中定义 serialVersionUID,并且任何 修改是在课堂上进行的,那么我们将无法反序列化 我们的类是因为java编译器生成的serialVersionUID 修改后的类将不同于旧的序列化对象,并且 反序列化过程最终会抛出 java.io.InvalidClassException

    运行时的序列化与每个可序列化的类相关联 一个版本号,称为 serialVersionUID,在 反序列化以验证发送方和接收方 序列化对象已加载该对象的类 在序列化方面兼容

serialVersionUID object1 和 object2?

这将是相同的,因为串行版本 uid 是静态的(即类级别)

【讨论】:

【参考方案2】:

SerialVersionUID 是识别类版本的方法。所以同一类的所有对象都将具有相同的 SerialVersionUID。 但是,如果您更改类,建议更改 SerialVersionUID。然后在不兼容的情况下,对象的序列化就会失败。

见:What is a serialVersionUID and why should I use it?

【讨论】:

以上是关于SerialVersionUID Java - SerialVersionUID 如何工作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Java中的serialVersionUID

为啥Java忽略我的serialVersionUID?

java 序列化 serialVersionUID 的作用 和 两种添加方式

Java serialVersionUID作用

java中的serialVersionUID是啥,通常在异常类中? [复制]

跨越不同JVM的Java标准库中的SerialVersionUID