栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

序列化和反序列化

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

序列化和反序列化

一、概念

     序列化:把对象转换为字节序列的过程称为对象的序列化

     反序列化:把字节序列恢复为对象的过程称为对象的反序列化

二、用途

对象的序列化主要有两种用途:

1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

2)在网络上传送对象的字节序列

在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,于是web容器就会把一些session先序列化到硬盘中,等到要用了,再把保存在硬盘中的对象还原到内存中。

当两个进程在进行远程通信时,彼此可以发送各种类型的数据,无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象

三、一些接口和类

序列化和反序列化的一些接口和类:

Java.io.Serializable

Java.io.Externalizable

ObjectOutput

ObjectInput

ObjectOutputStream

ObjectInputStream

Serializable接口:类通过实现java.io.Serializable接口以启用其序列化功能,未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的,序列化接口没有方法或字段,仅用于标识可序列化的语义。

四、父子类实现序列化和反序列化问题

一个子类实现了Serizlizable接口,它的父类都没有实现Seralizable接口,序列化该子类对象,要想反序列化后输出父类定义的某变量的数值,就需要让父类也实现Serializable接口或者父类有默认的无参构造函数中没有多变量赋值,那么父类成员变量值都是默认值。

在父类没有实现Serializable接口时,虚拟机是不会序列化父对象的,而一个Java对象的构造必须先有父对象,才有子对象,反序列化也不列外。所以反序列化时,为了构造父对象,只能调用父类的无参构造函数作为默认的父对象。因此当我们取父对象的变量值时,它的值是调用父类无参构造函数后的值,如果在父类无参构造函数中没有对变量赋值,那么父类成员变量值都是默认值。

根据以上特性,我们可以将不需要被序列化的字段抽取出来放到父类中,子类实现Serializable接口,子类可以序列化,父类不实现Serializable接口,但要提供一个空构造方法,否则父类的字段数据将不被序列化。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678645.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号