Java序列化技术是将一个Java对象转化成一串二进制表示的字节数组,通过保存或者转移这些字节数组数据达到持久化的目的。需要序列化,对象需要实现java.io.Serializable接口。反序列化则是相反的过程,将这个字节数组数据再重新狗造成对象。那么序列化的数据主要包含下面5部分信息:
1.是序列化头文件
主要是使用的序列化协议、序列化协议版本等
2. 是要序列化的类的描述
3. 是对象中各个属性的描述
4. 输出对父类信息的描述(如果有父类,信息描述同2)
5. 输出对象的属性项的实际值(如果属性项是一个对象,那么这里还将序列化这个对象)
下面是对序列化过程中一些复杂情况的总结:
1. 当父类实现了java.io.Serializable接口,所有子类都可以被序列化。
2. 子类实现了java.io.Serializable接口,父类没有,则父类中的属性不能序列化(不报错,数据会丢失,但是在子类中属性仍可以正确序列化)
3. 如果序列化的属性是一个对象,则这个对象必须实现java.io.Serializable接口,否则会报错。
4. 在反序列时,如果对象的属性有修改或删减,则修改的部分属性会丢失,不会报错。
5. 在反序列时,如果SerialVersionUID被修改,则反序列时会失败。