`
sharajava
  • 浏览: 66888 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

技术补习之序列化ID(serialVersionUID)

    博客分类:
  • Java
JVM 
阅读更多

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

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

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

分享到:
评论
1 楼 okwangxing 2010-03-26  
学习了.原来一直不清楚第二点.

相关推荐

    IDEA中实体类实现了序列化接口

    实现该接口后,Java虚拟机(JVM)会根据类的信息生成一个序列化ID,即`serialVersionUID`,用于表示类的版本标识。如果序列化ID不同,即使类的结构相同,JVM也会认为是不同的类,从而可能导致反序列化失败。 #### 三...

    java 对象的序列化与反序列化

    Java对象的序列化和反序列化是Java编程中一项重要的技术,主要用于将对象的状态转换为字节流,以便存储或在网络上传输。这一过程对于理解Java的IO操作、持久化数据以及实现分布式通信等场景非常关键。 首先,我们来...

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

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

    java序列化(Serializable)的作用和反序列化.doc

    序列化是Java中一项非常重要的技术,它允许开发者将对象的状态持久化存储或在网络中传输。通过对序列化的理解和应用,开发者可以更加灵活地管理对象的状态,并实现更复杂的应用逻辑。在实际项目中,合理利用序列化...

    java serializable 序列化与反序列化

    **三、序列化版本ID (`serialVersionUID`)** Java允许我们定义一个名为`serialVersionUID`的静态final字段,用来标识类的不同版本。如果类在序列化后进行了修改,该值会改变,防止错误的反序列化。如果没有显式声明...

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

    Java 序列化和 serialVersionUID 的使用方法实例 Java 序列化是指将 Java 对象转换为二进制流的过程,以便在网络中传输或持久化到数据库或文件系统中。序列化的作用是将 Java 对象的状态保存起来,以便下次使用时...

    Java序列化

    - `serialVersionUID` 是一个特殊的字段,用于验证序列化版本的一致性。如果类的序列化结构发生改变,而这个ID未变,可能会导致反序列化失败。默认情况下,编译器会自动生成此ID,也可以由开发者手动指定。 5. **...

    java程序,序列化和反序列化操作对文件的运用

    为了避免这个问题,可以使用版本ID(serialVersionUID)来确保序列化兼容性。 ```java // 在类定义中添加版本ID private static final long serialVersionUID = 1L; ``` 文件的序列化和反序列化操作对于数据持久化...

    java序列化实现演示

    如果在反序列化时,类的结构发生变化(比如添加、删除或修改了字段),但是`serialVersionUID`未更新,那么就会抛出`InvalidClassException`,提示序列化版本不匹配。 在给定的链接"Java序列化机制(2)- ...

    序列化与反序列化Demo

    总结一下,序列化与反序列化是编程中必不可少的技术,它们用于数据持久化和网络通信。在Java中,实现这些功能需要实现`Serializable`接口,并使用`ObjectOutputStream`和`ObjectInputStream`进行操作。然而,使用...

    Java_序列化的高级认识

    序列化ID,即`serialVersionUID`,是Java序列化机制中一个关键的概念。它是一个类的唯一标识符,用于在序列化和反序列化过程中确定类的版本一致性。如果序列化对象和反序列化对象的`serialVersionUID`不匹配,将会抛...

    如何正确的使用Java序列化技术

    ### 如何正确使用Java序列化技术 #### 技术研究系列 **摘要:** 本文将深入探讨Java序列化技术的各个方面,从基础知识入手,逐步展开对序列化技术机制与原理的介绍。此外,还将深入讨论如何精准控制序列化机制,...

    Java序列化_Java序列化结构_

    如果类在序列化后进行了修改,`serialVersionUID`应该相应更新,否则反序列化可能会失败。如果没有显式定义,Java会自动生成一个基于类结构的默认值。 然而,Java序列化也存在一些潜在的问题和不足: 1. **安全性*...

    java自动序列化

    Java自动序列化是一种在Java编程语言中用于持久化对象的技术,它允许我们将对象的状态转换为字节流,以便可以存储或在网络上传输。这在分布式应用程序、数据存储和跨网络进程通信中非常常见。本篇文章将深入探讨Java...

    对象的序列化和反序列化

    如果类的`serialVersionUID`与序列化时的版本不匹配,反序列化时就会抛出`InvalidClassException`。 在实际应用中,我们还可以使用`transient`关键字来标记那些不需要序列化的字段,因为这些字段可能包含敏感信息...

    java对象序列化和反序列化

    2. ** serialVersionUID**:为了保证序列化版本的兼容性,每个可序列化类应定义一个`serialVersionUID`字段。如果不显式定义,Java会自动生成一个,但当类结构改变时可能导致异常。 3. **ObjectInputValidation**:...

    Java对象序列化标准最新版

    每个可序列化的类都应该有一个唯一的序列化ID,即`serialVersionUID`。这个ID用于确保在序列化和反序列化过程中对象的一致性。 #### 五、可序列化对象的版本管理 **5.1 概览** 由于Java对象可能会随着时间发生...

    java序列化(Serializable)的作用和反序列化

    序列化机制是Java提供的强大工具之一,可以帮助开发者轻松地保存和恢复对象的状态。 #### 二、序列化的应用场景 1. **文件保存**:当需要将内存中的对象状态保存到文件中或数据库中时,序列化非常有用。 2. **网络...

    反序列化失败的原因报告

    序列化 ID 不一致是因为实体类实现了 Serializable 接口,但没有定义 serialVersionUID 的值。系统会根据类的修饰符、实现的接口、定义的方法以及属性等信息计算出 serialVersionUID,因而导致本地的实体类和服务器...

Global site tag (gtag.js) - Google Analytics