IO之序列化流与反序列化流

Posted www1842564021

tags:

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

首先是运行图

技术图片

 

 

 对象序列化流ObjectOutputStream

ObjectOutputStream Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。

通过在流中使用文件可以实现对象的持久存储。

首先创建一个person类

表明空参构造,有参构造 tostring

技术图片

 

 然后创建demo01

 

技术图片

 

 成功后演示

技术图片

 

 

 

 

因为是写进系统的数据 所以是乱码

 

 

 对象反序列化流ObjectInputStream

 

 

ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。支持 java.io.Serializable接口的对象才能从流读取。

 

技术图片

 

 成功运行演示

技术图片

 

 

序列化接口

 

当一个对象要能被序列化,这个对象所属的类必须实现Serializable接口。否则会发生异常NotSerializableException异常。

 

 

 

同时当反序列化对象时,如果对象所属的class文件在序列化之后进行的修改,那么进行反序列化也会发生异常InvalidClassException。发生这个异常的原因如下:

 

该类的序列版本号与从流中读取的类描述符的版本号不匹配

 

该类包含未知数据类型

 

该类没有可访问的无参数构造方法

 

Serializable标记接口。该接口给需要序列化的类,提供了一个序列版本号。serialVersionUID. 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。

 

代码演示:

技术图片

 

 

 瞬态关键字transient

当一个类的对象需要被序列化时,某些属性不需要被序列化,这时不需要序列化的属性可以使用关键字transient修饰。只要被transient修饰了,序列化时这个属性就不会序列化了。

同时静态修饰也不会被序列化,因为序列化是把对象数据进行持久化存储,而静态的属于类加载时的数据,不会被序列化。

代码演示:

技术图片

 

 技术图片

 

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

序列化流与反序列化流

序列化流与反序列化流

序列化流与反序列化流

Java——Properties集合,Object序列化流与反序列化流,打印流,commons-IO文件工具类

java对象序列化与反序列化

java对象的序列化与反序列化