serialVersionUID的作用
来源:互联网 发布:一般约束的最优化问题 编辑:程序博客网 时间:2024/06/04 00:57
序列化是干什么的
简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
序列化对static和transient变量,是不会自动进行状态保存的。
对于Socket, Thread类,不支持序列化。如果Socket,Thread类可以被序列化,但是被反序列化之后也无法对他们进行重新的资源分配;再者,也是没有必要这样实现。
什么情况下需要序列化
- 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
- 当你想用套接字在网络上传送对象的时候;
- 当你想通过RMI传输对象的时候;
serialVersionUID的作用
Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。(InvalidCastException)
serialVersionUID有两种显示的生成方式
- 一个是默认的1L,比如:private static final long serialVersionUID = 1L;
- 一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,
当实现java.io.Serializable接口的实体(类)没有显式地定义一个名为serialVersionUID,类型为long的变量时,Java序列化机制会根据编译的class(它通过类名,方法名等诸多因素经过计算而得,理论上是一一映射的关系,也就是唯一的)自动生成一个serialVersionUID作序列化版本比较用,这种情况下,如果class文件(类名,方法明等)没有发生变化(增加空格,换行,增加注释,等等),就算再编译多次,serialVersionUID也不会变化的.
serialVersionUID的应用场景
如果我们不希望通过编译来强制划分软件版本,即实现序列化接口的实体能够兼容先前版本,未作更改的类,就需要显式地定义一个名为serialVersionUID,类型为long的变量,不修改这个变量值的序列化实体都可以相互进行串行化和反串行化。
阅读全文
0 0
- 什么是serialVersionUID,serialVersionUID的作用
- serialVersionUID的作用
- serialVersionUID的作用
- serialVersionUID的作用
- serialVersionUID的作用
- serialVersionUID的作用
- Java: serialVersionUID的作用
- serialVersionUID的作用
- serialVersionUID的作用
- serialVersionUID的作用
- serialVersionUID的作用
- serialVersionUID的作用
- serialVersionUID的作用
- serialVersionUID的作用
- Java: serialVersionUID的作用
- serialVersionUID 的作用
- serialVersionUID 的作用
- serialVersionUID的作用
- JAVA的XML解析
- 使用脚本记录 macbook 电池容量
- c基础01
- Android系统下C语言hello world
- numpy/arrayobject.h”: No such file or directory
- serialVersionUID的作用
- CentOS 6 python2.7 virtualenv 环境搭建
- 在Ubuntu系统、GPU模式下运行Fast R-cnn代码
- Codeforces Round #452 (Div. 2)
- LC- Island Perimeter
- IT行业风险投资
- 学习笔记13
- MySQL基础教程14-Mysql插入中文数据报错的原因和解决办法
- 10019---SpringBoot简介