码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-02-06 14:51:45      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:系统   object   code   exce   cep   class   com   反序   基本数据   

首先是运行图

技术图片

 

 

 对象序列化流ObjectOutputStream

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

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

首先创建一个person类

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

技术图片

 

 然后创建demo01

 

技术图片

 

 成功后演示

技术图片

 

 

 

 

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

 

 

 对象反序列化流ObjectInputStream

 

 

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

 

技术图片

 

 成功运行演示

技术图片

 

 

序列化接口

 

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

 

 

 

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

 

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

 

该类包含未知数据类型

 

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

 

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

 

代码演示:

技术图片

 

 

 瞬态关键字transient

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

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

代码演示:

技术图片

 

 技术图片

 

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

标签:系统   object   code   exce   cep   class   com   反序   基本数据   

原文地址:https://www.cnblogs.com/www1842564021/p/12268261.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!