一、什么是序列化
程序存在的意义就是进行数据的计算与传输,在我们的网络架构中只能识别二进制和字节码,而不能识别java对象。序列化就是将无法识别的java对象转化为二进制和字节码的一种机制。
通过一定的规则将 java对象,包括数据和数据类型转换成二进制和字节码 称为序列化
。将二进制和字节码还原成 java对象的过程就称为反序列化
二、什么是 serialVersionUID
1、每一个实现序列化接口 Serializable 的java 对象,都有一个 serialVersionUID。
2、serialVersionUID 是唯一的,相当于 java对象的唯一身份标识
3、如果没有显示声明,java 对象 serialVersionUID 会根据类中的数据、结构生成。也就是说,一旦修改了 java 对象,serialVersionUID 也会不同
4、为了保证,在对java 对象添加一个方法,或者修改某个数据 不会发生无法反序列化的结果,这是就要指定 serialVersionUID 。保证 反序列化的正常执行。
三、Java原生序列化实操
3.1、测试对象
3.2、测试部分代码
构建 `Money` 对象,并进行序列化和反序列化的操作,并将序列化后的数据持久化到磁盘文件中。
3.3、模拟操作1
step1、在没有在没有显示声明 serialVersionUID 下,执行序列化操作,持久化到文件中。
step2、修改 Money 对象,新增一个属性
step3、进行反序列化,将文件中的数据反序列化成 Money对象
反序列化失败
3.4、模拟操作2
step1、显示声明 serialVersionUID 下,执行序列化操作,持久化到文件中。
step2、修改 Money 对象,新增一个属性
step3、进行反序列化,将文件中的数据反序列化成 Money对象
反序列化成功