序列化与反序列化

Posted yuanfei1110111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列化与反序列化相关的知识,希望对你有一定的参考价值。

对象的输出流将指定的对象写入文件的过程,就是将对象序列化的过程;
对象的输入流将指定序列化好的文件读出来的过程,就是对象反序列化的过程。

serialVersionUID是用于记录class文件版本信息的,serialVersionUID这个数字是jvm通过一个类的类名、成员、包名、工程名算出来的一个数字。如果序列化与反序列化的时候可能会修改类成员,那么最好在一开始就给这个类指定一个serialVersionUID,如果一个类已经指定了serialVersionUID,那么在序列化和反序列化的时候,jvm都不会再自己计算class的serialVersionUID了。(使用ObjectInputStream反序列化的时候,ObjectInputStream会先读取文件中的serialVersionUID,然后与本地的class文件的serialVersionUID进行对比,如果两个id不一致,反序列失败)

如果在User类中再添加一个成员变量,而这个变量也是一个class,如Address,那么这个Address类也必须实现Serializable接口。

ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入。

对象的反序列化创建对象的时候并不会调用构造方法。

以上是关于序列化与反序列化的主要内容,如果未能解决你的问题,请参考以下文章

Java序列化与反序列化

Java序列化与反序列化

java 对象序列化与反序列化

Java序列化与反序列化

Python 序列化与反序列化

[Java安全]Java序列化与反序列化