Java的序列化和反序列化
1、Java的序列化 ,主要是通过ObjectOutputStream的writeObject方法实现,通过对象输出流写出到磁盘中;反序列化是通过ObjectInutStream的readObject方法实现,通过对象输入流读进程序内存中。
java序列化是一个持久化的过程,减少内存开销,等程序需要用到对象数据的时候再进行反序列化到内存中,供程序进行使用
2、java的序列化必须要实现Serializable接口,在序列化的底层源码中会通过判断传过来的对象类型是否是Serializable类型(instanceof),如果不是抛java.io.NotSerializableException异常
3、在序列化和反序列化的过程中,java对象的版本号(serialVersionUID)要始终保持一致,如果再反序列化的过程中,发现对象的版本号和序列化时的版本号不一样,会抛出java.io.InvalidClassException异常 不可获得相关的class字节码文件
4、在java对象中的实体变量,可以通过transient或者static进行修饰
5、在一个声明序列化的java对象中定义一个其他对象类型的成员变量,那这个其他对象也必须要声明序列化,否则抛java.io.NotSerializableException异常,Student类中定义Teacher类型变量,Student类序列化,则Teacher类也必须序列化
6、子类序列化、父类不序列化,那么在对子类进行序列化反序列化操作的时候,父类的中的相关变量会在子类中体现为丢失
文章只是本人在学习完一个知识点后,抛开所有学习资料,在回顾的时候凭脑中的一些记忆写下的,所以肯定有不足的地方,无论是知识点还是学习方法,大家都可以互相讨论学习
写下来的目的是:在若干年的编程技术积累后,再到园子里来回忆当年的学习痕迹,相信会有更多的感悟