Java 序列化ID的作用
来源:互联网 发布:手机决策软件 编辑:程序博客网 时间:2024/05/17 12:03
序列化ID的作用:
其实,这个序列化ID起着关键的作用,它决定着是否能够成功反序列化!简单来说,java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地实体类中的serialVersionUID进行比较,如果相同则认为是一致的,便可以进行反序列化,否则就会报序列化版本不一致的异常。等会我们可以通过代码验证一下。
序列化ID如何产生:
当我们一个实体类中没有显示的定义一个名为“serialVersionUID”、类型为long的变量时,Java序列化机制会根据编译时的class自动生成一个serialVersionUID作为序列化版本比较,这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID。譬如,当我们编写一个类时,随着时间的推移,我们因为需求改动,需要在本地类中添加其他的字段,这个时候再反序列化时便会出现serialVersionUID不一致,导致反序列化失败。那么如何解决呢?便是在本地类中添加一个“serialVersionUID”变量,值保持不变,便可以进行序列化和反序列化。
验证“serialVersionUID”不一致导致反序列化失败
- public class Person implements Serializable {
- private int age;
- private String sex;
- private String name;
- private String hobby;
- //序列化ID
- private static final long serialVersionUID = -5809782578272943999L;
- ............
- }
复用前篇使用到的代码,首先,我们生成一个本地Person类,里面添加一个字段age,然后将其序列化存于本地E:/hello.txt中,
运行一下,会在控制台中打印“序列化成功。”,然后我们在Person类中再添加一个字段,name,然后直接从E:/hello.txt中反序列化,再运行一下,看看会出现什么问题。
运行一下,不出意外,报了一个异常。
从上面两张图便可以看出两次的序列化ID是不一样的,导致反序列化失败。
总结:
虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID 是否一致(就是 private static final long serialVersionUID = 1L)。
- Java的序列化ID的作用
- java 序列化ID的作用
- java 序列化ID的作用
- Java 序列化ID的作用
- java类的序列化id作用
- java序列化时候序列ID作用(结合实际场景)
- java序列化时候序列ID作用(结合实际场景)
- java序列化和反序列化以及序列化ID的作用分析
- 序列化的概念和序列化ID的作用?
- java序列化的作用
- java序列化的作用
- java序列化的作用
- Java序列化的作用
- java序列化的作用
- java序列化的作用
- Java序列化的作用
- java序列化的作用
- java序列化的作用
- DeepLearnToolbox中SAE代码理解
- 项目设计与开发中的破窗效应
- Hive--HiveQL与SQL区别
- MySQL树形数据查询及展示
- Sqlite简单例子
- Java 序列化ID的作用
- 机器学习【2】(四)线性回归的概率解释
- 每天一条linux命令---ifconfig
- OJ_1160.存钱大作战
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
- ubuntu常见集合
- 计算机网络(六) 网络层--硬件地址与ARP
- oracle trigger中的before和after
- Android 将List<Bean>数据写入文件,从文件中读取;以及多个 Activity 的退出方法