`

serialVersionUID 用来表明类的不同版本间的兼容性

    博客分类:
  • Java
 
阅读更多

http://blog.csdn.net/hulefei29/article/details/2823221

 

 

简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来 的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序 列化,否则就会出现序列化版本不一致的异常。

当实现java.io.Serializable接口的实体(类)没有显式地定义一个名为serialVersionUID,类型为long的变 量时,Java序列化机制会根据编译的class自动生成一个serialVersionUID作序列化版本比较用,这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID 。

如果我们不希望通过编译来强制划分软件版本,即实现序列化接口的实体能够兼容先前版本,未作更改的类,就需要显式地定义一个名为serialVersionUID,类型为long的变量,不修改这个变量值的序列化实体都可以相互进行串行化和反串行化。

 

补充一点, serialVersionUID相同的类,反序列化时才会成功,比如,序列化时其值为1, 反序列化化时,其值为2,则会报InvalidClassExceptions;如果此值没设,其值会根据编译时的类名算出来,如果类变了,但是类名没变,序列化也能成功; 类的serialVersionUID相同时,反序列化都没问题,但是对于新增的字段或者删除的字段,反序列化化时只会设为默认值。

分享到:
评论

相关推荐

    Java中serialVersionUID的解释

    因此,我们可以看到,serialVersionUID扮演着非常重要的角色,它可以帮助我们避免不兼容性问题的出现,并保持版本的兼容性。所以,在实现 Serializable 接口时,我们一定要注意到 serialVersionUID 的定义和使用。

    java类中serialVersionUID详解.pdf

    - **兼容性维护**:显式定义 `serialVersionUID` 可以确保序列化对象能够在不同版本之间兼容。 - **版本控制**:在更新类结构时,可以通过修改 `serialVersionUID` 来标记版本变更,从而避免因类结构改变导致的序列...

    详述IntelliJ IDEA 中自动生成 serialVersionUID 的方法(图文)

    在 Java 序列化机制中,serialVersionUID 是一个不可或缺的角色,它可以通过在运行时判断类的 serialVersionUID 来验证版本一致性。在进行反序列化时,JVM 会把传来的字节流中的 serialVersionUID 与本地相应实体...

    序列化版本号serialVersionUID的作用_动力节点Java学院整理

    serialVersionUID用来表明类的不同版本间的兼容性。有两种生成方式:一个是默认的1L;另一种是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段。在JDK中,可以利用JDK的bin目录下的serialver.exe工具...

    coreJava: serialVersionUID

    在更新`serialVersionUID`时,开发者需要权衡兼容性和版本控制之间的关系,确保在不影响旧数据反序列化的同时,适当地处理新旧版本之间的差异。 在博文《coreJava: serialVersionUID》中,作者可能详细探讨了`...

    java类中serialVersionUID的作用及其使用

    4. 在序列化和反序列化中使用serialVersionUID:在序列化和反序列化中,serialVersionUID用于验证类的版本一致性,从而确保序列化和反序列化的正确性。 serialVersionUID是Java语言中实现Serializable接口的类必须...

    serialVersionUID作用全面解析

    例如,在分布式系统中,serialVersionUID 可以用于标识不同版本的类,以确保在序列化和反序列化过程中,版本是一致的。 在 Eclipse 中,serialVersionUID 也可以自动生成。例如,当我们实现 Serializable 接口的类...

    614.612.JAVA基础教程_IO流与网络编程-serialVersionUID的理解(614).rar

    为了确保序列化兼容性,开发者可以在类中显式声明`serialVersionUID`,并赋予一个固定值。这样做可以避免因未来修改类结构而导致的序列化问题。例如: ```java public class MyClass implements Serializable { ...

    全面解释Java中的serialVersionUID

    `serialVersionUID`的主要作用是确保在类版本升级后,序列化的兼容性得以维持。 序列化接口`Serializable`的实现类需要一个`serialVersionUID`字段,它是一个长期不变的标识符,用于识别特定版本的类。当一个类被...

    idea如何自动生成serialVersionUID

    IDEA中自动生成serialVersionUID是Java开发中的一项重要功能,因为serialVersionUID是一个非常重要的字段,用于验证类的版本一致性。在本文中,我们将详细介绍如何使用IDEA自动生成serialVersionUID。 首先,让我们...

    序列化类的作用Serializable

    为了确保序列化和反序列化的兼容性,Java引入了一个名为`serialVersionUID`的版本号。这是一个长期(long)类型的静态(static)、最终(final)字段,用于标识类的不同版本。如果在不同的环境中,类的`...

    java中的SuppressWarnings(xxx).doc

    在序列化和反序列化操作中,该字段用于保持版本的兼容性。如果没有提供该字段,可能会出现问题。 使用 @SuppressWarnings("serial") 注解可以抑制该警告信息,但是我们仍然推荐提供 serialVersionUID 字段,以确保...

    java序列化和serialVersionUID的使用方法实例

    显示设置 serialVersionUID 值可以保证版本的兼容性,即使类发生改变,也可以反序列化出之前保存的对象。 下面是一个简单的例子,演示了如何使用 Serializable 接口和 serialVersionUID 实现序列化和反序列化: ``...

    Java软件开发实战 Java基础与案例开发详解 13-9 对象流 共10页.pdf

    这个标识符用于确保类的不同版本之间的序列化兼容性。 **默认情况下**,如果没有显式定义`serialVersionUID`,Java运行时环境会根据类的内部细节自动生成一个默认值。如果修改了类的源代码并重新编译,则新生成的类...

    serialVersionUID.txt

    三期第一张IO笔记 6

    java.io.InvalidClassException local class incompatible 处理方法

    为了避免序列化过程中出现`java.io.InvalidClassException`异常,特别是处理序列化对象版本兼容性问题时,强烈推荐在所有可序列化的类中显式声明`serialVersionUID`。这不仅可以提高程序的稳定性和健壮性,还能简化...

    Spring Boot整合ElasticSearch实现多版本兼容的方法详解

    理解版本兼容性是关键,以确保你的应用能够顺利运行在不同版本的Elasticsearch之上。在实际开发中,你可能还需要考虑集群配置、索引管理、搜索优化等方面,以便充分利用Elasticsearch的强大功能。

    关于Java您不知道的5件事

    - `serialVersionUID`是序列化过程中用来验证类的版本一致性的唯一标识符。 - 如果类的结构发生变化,应更新`serialVersionUID`值,以避免反序列化失败。 2. **实践建议**: - 明确指定类的`serialVersionUID`值...

Global site tag (gtag.js) - Google Analytics