首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用声明serialVersionUID

使用声明serialVersionUID
EN

Stack Overflow用户
提问于 2012-12-19 04:10:14
回答 3查看 136关注 0票数 0

可能重复: 什么是serialVersionUID,我为什么要使用它?

为什么我们在java类中声明serialVersionUID?在普通的serialVersionUID类中声明的用途是什么?

代码语言:javascript
复制
class Simple
{
    public static final long serialVersionUID=1L;
}
EN

回答 3

Stack Overflow用户

发布于 2012-12-19 04:13:13

Java提供了一种称为对象序列化的机制,其中一个对象可以表示为一个字节序列,其中包括对象的数据以及关于对象类型和存储在对象中的数据类型的信息。

将序列化对象写入文件后,可以从文件中读取该对象并反序列化,即表示对象及其数据的类型信息和字节可用于在内存中重新创建对象。

serialization.htm

票数 0
EN

Stack Overflow用户

发布于 2012-12-19 04:28:03

代码语言:javascript
复制
serialVersionUID is for Serialization Purpose.
private static final long serialVersionUID = 1L;

在没有serialVersionUID的情况下,有些时候得到了SerialzationException。参考java.io.Serializable

票数 0
EN

Stack Overflow用户

发布于 2012-12-19 05:08:38

您无法得到比java.io.Serializable文档更好的解释:

序列化运行库与每个可序列化的类关联一个名为serialVersionUID的版本号,该版本号在反序列化期间用于验证序列化对象的发送方和接收方是否为该对象加载了与序列化兼容的类。如果接收方为具有与相应发送方类不同的serialVersionUID的对象加载了类,则反序列化将导致InvalidClassException。可序列化的类可以显式声明自己的serialVersionUID,方法是声明一个名为"serialVersionUID“的字段,该字段必须是静态的、最终的和类型为long的: 任何-访问-修改静态最终长serialVersionUID =42 L; 如果可序列化类没有显式声明serialVersionUID,则序列化运行时将根据类的各个方面计算该类的默认serialVersionUID值,如对象描述的那样。但是,强烈建议所有可序列化的类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类细节高度敏感,这些细节可能因编译器实现而有所不同,因此在反序列化过程中可能导致意外的InvalidClassExceptions。因此,为了在不同的java编译器实现之间保证一致的serialVersionUID值,可序列化类必须声明一个显式的serialVersionUID值。此外,还强烈建议显式serialVersionUID声明在可能的情况下使用私有修饰符,因为此类声明仅适用于立即声明类-序列化declarations字段作为继承成员使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13945362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档