Serializable:serialVersionUID

原创 2015年07月08日 10:05:05

序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致 InvalidClassException。

可序列化类可以通过声明名为 “serialVersionUID” 的字段(该字段必须是静态 (static)、最终 (final) 的 long 型字段)显式声明其自己的 serialVersionUID:

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

如果可序列化类未显式声明 serialVersionUID,则序列化运行时将基于该类的各个方面计算该类的默认 serialVersionUID 值,如“Java(TM) 对象序列化规范”中所述。不过,强烈建议 所有可序列化类都显式声明 serialVersionUID 值,原因是计算默认的 serialVersionUID 对类的详细信息具有较高的敏感性,根据编译器实现的不同可能千差万别,这样在反序列化过程中可能会导致意外的 InvalidClassException。因此,为保证 serialVersionUID 值跨不同 java 编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID 值。还强烈建议使用 private 修饰符显示声明 serialVersionUID(如果可能),原因是这种声明仅应用于直接声明类 – serialVersionUID 字段作为继承成员没有用处。

这段是从api文档copy过来的,黑体的部分,是我认为需要关注的几个点。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

关于Serializable的serialVersionUID

转自百度文库:http://wenku.baidu.com/view/884910707fd5360cba1adbef.html 众所周知,当某class实现了Serializable接口后,由...

关于Serializable的serialVersionUID

在实现了Serializable接口的class中,需要声明一个long serialVersionUID,用来标明当前class的版本号,但很多人在编程时,总是不原意去声明这个serialVersi...

Java Serializable序列化,反序列化 ,serialVersionUID的作用

Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。如此可以把对象转换成字节流,可以进行网络传输,保持到本地文件,数据库等,增加对象的生命周...

Serializable 和 serialVersionUID

如果需要使用ObjectInputStream和ObjectOuputStream的readObject以及writeObject()方法写入和读取非Java的基础类,需要对该类进行序列化。 例如,...

The serializable class XXX does not declare a static final serialVersionUID field of type long的警告

【现象】 当你一个类实现了Serializable接口,如果没有定义serialVersionUID,Eclipse会提供这个提示功能告诉你去定义之。   【serialVersio...

masterJ2SE篇007——Serializable serialVersionUID

我们在实现Serializable接口的时候,都会提示生成一个serialVersionUID serialVersionUID的作用是:序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象...

关于The serializable class XXX does not declare a static final serialVersionUID field of type long的警告

关于The serializable class XXX does not declare a static final serialVersionUID field of type long的警...

serialVersionUID 和 Serializable

当对象要持久化到数据库,文件系统,或者网络传输时,说白了 就是流化时 要实现 Serializable接口 这个接口什么都没有,网络传言是个标识。你说为啥要持久化

Serializable接口serialVersionUID的作用

简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。 在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类...

java serialVersionUID 有关serializable

java serialVerisonUID 是为了不同软件版本在序列化和反序列化过程中兼容引入的。 当implements serializable接口后,elcipse会提示生成该ID。 该ID的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)