`
yyjlinux
  • 浏览: 370044 次
  • 来自: ...
社区版块
存档分类
最新评论

serialVersionUID的使用

    博客分类:
  • Java
阅读更多

 

http://stackoverflow.com/questions/285793/what-is-a-serialversionuid-and-why-should-i-use-it

 

http://topic.csdn.net/t/20051017/20/4332328.html

 

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

关于什么是serialVersionUID,可以参考java.io.Serializable的Java Doc,上面描述得很清楚:
java.io.Serializable

The serialization runtime associates with each serializable class a version number, called a serialVersionUID, which is used during deserialization to verify that the sender and receiver of a serialized object have loaded classes for that object that are compatible with respect to serialization. If the receiver has loaded a class for the object that has a different serialVersionUID than that of the corresponding sender's class, then deserialization will result in an InvalidClassException. A serializable class can declare its own serialVersionUID explicitly by declaring a field named "serialVersionUID" that must be static, final, and of type long:

ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;

If a serializable class does not explicitly declare a serialVersionUID, then the serialization runtime will calculate a default serialVersionUID value for that class based on various aspects of the class, as described in the Java(TM) Object Serialization Specification. However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization. Therefore, to guarantee a consistent serialVersionUID value across different java compiler implementations, a serializable class must declare an explicit serialVersionUID value. It is also strongly advised that explicit serialVersionUID declarations use the private modifier where possible, since such declarations apply only to the immediately declaring class--serialVersionUID fields are not useful as inherited members.

分享到:
评论

相关推荐

    Java中serialVersionUID的解释

    Java 中 serialVersionUID 的解释 Java 中的 serialVersionUID 是一个非常重要的概念,在实现 Serializable 接口的类中,它...所以,在实现 Serializable 接口时,我们一定要注意到 serialVersionUID 的定义和使用。

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

    通过使用 IntelliJ IDEA 自动生成 serialVersionUID,我们可以更方便地实现序列化和反序列化,提高开发效率和质量。 此外,Java 序列化机制还可以实现两个主要目的,一是把对象的字节序列永久地保存到硬盘上,通常...

    coreJava: serialVersionUID

    计算`serialVersionUID`的方法有多种,包括使用`javap`命令行工具,或者使用一些IDE如Eclipse或IntelliJ IDEA的插件。在更新`serialVersionUID`时,开发者需要权衡兼容性和版本控制之间的关系,确保在不影响旧数据反...

    java类中serialVersionUID的作用及其使用

    Java类中serialVersionUID的作用及其使用 Java类中serialVersionUID是一种特殊的静态变量,用于标识类的序列化版本。它是Java语言中实现Serializable接口的类必须定义的变量,用于在反序列化时验证类的版本一致性。...

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

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

    java类中serialVersionUID详解.pdf

    ### Java 类中 `serialVersionUID` 详解 #### 一、`serialVersionUID` 概述 在 Java 中,`serialVersionUID...理解并正确使用 `serialVersionUID` 对于开发可维护性强且具有良好序列化特性的 Java 应用程序至关重要。

    serialVersionUID作用全面解析

    下面是一个简单的示例代码,演示了 serialVersionUID 在应用中的使用: ```java import java.io.Serializable; public class Person implements Serializable { private static final long serialVersionUID = ...

    idea如何自动生成serialVersionUID

    在本文中,我们将详细介绍如何使用IDEA自动生成serialVersionUID。 首先,让我们了解serialVersionUID的重要性。serialVersionUID是一个64位的哈希字段,用于标识类的版本。Java的序列化机制是通过在运行时判断类的...

    全面解释Java中的serialVersionUID

    Java中的`serialVersionUID`是一个非常重要的概念,尤其是在处理序列化和反序列化操作时。序列化是将对象的状态转换为字节流的过程,而反序列化则是将字节流恢复为对象状态。`serialVersionUID`的主要作用是确保在类...

    serialVersionUID.txt

    三期第一张IO笔记 6

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

    本教程将深入探讨这两个主题,并特别关注`serialVersionUID`这个概念。`serialVersionUID`在Java序列化过程中起着关键作用。 首先,让我们来理解什么是IO流。IO流是Java中处理数据输入和输出的一种机制。Java提供了...

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

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

    使用自定义ClassLoader解决反序列化serialVesionUID不一致问题 _ 回忆飘如雪1

    使用反射技术在运行时修改对象的`serialVersionUID`。这种方法可以修复`Object`的`serialVersionUID`,但不能处理那些没有`serialVersionUID`属性的类,因为反射无法动态添加字段。 3. **修改Class字节码**: ...

    GenerateSerialVersionUID

    使用该插件,开发者可以避免手动计算并输入`serialVersionUID`,提高开发效率,减少错误。 1. 安装插件:首先,需要在IDE(如IntelliJ IDEA或Eclipse)中安装`GenerateSerialVersionUID`插件。根据IDE的不同,安装...

    java除去类里面的黄色警告

    在Java编程中,IDE(如MyEclipse)会通过颜色编码来标识代码中的不同状态,其中黄色警告通常意味着代码可能存在潜在的问题或不建议使用的特性,但并不一定导致编译错误。这些警告旨在帮助开发者提高代码质量和性能,...

    java中的SuppressWarnings(xxx).doc

    使用 @SuppressWarnings("serial") 注解可以抑制该警告信息,但是我们仍然推荐提供 serialVersionUID 字段,以确保类的序列化和反序列化操作的正确性。 二、@SuppressWarnings("xxxxx")是什么意思? @...

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

    对于数组类,无法显式声明`serialVersionUID`,因此它们总是使用默认计算的值。不过,在反序列化数组类时,Java序列化框架放宽了对`serialVersionUID`匹配的要求。 #### 总结 为了避免序列化过程中出现`java.io....

    反序列化失败的原因报告

    系统会根据类的修饰符、实现的接口、定义的方法以及属性等信息计算出 serialVersionUID,因而导致本地的实体类和服务器上的实体类的 serialVersionUID 不一致。 解决方案 解决反序列化失败的解决方案是给相关实体...

Global site tag (gtag.js) - Google Analytics