- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java序列化深入分析概要
Java 序列化深入分析
??序列化是指把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了Java对 象的状态以及相关的描述信息。客户端从文件中或网络上获得序列化后的对象字节流后,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象。本质上讲,序列化就是把实体对象状态按照一定的格式写入到有序字节流,反序列化就是从有序字节流重建对象,恢复对象状态。序列化机制的核心作用就是对象状态的 保存与重建。
Java序列化机制解析
??Java API提供了对序列化的支持,要实现对象的序列化和反序列化,基本上包括两个步骤:
1.声明对象具有可序列化的能力
2.通过Java API实现具体的序列化处理
??在Java语言中,声明对象具有可序列化的能力主要有两种方式:
其一,实现Serializable接口;
其二,实现Externalizable接口。
两者既有区别又有联系。
Serializable接口
??Serializable接口在JDK源码中定义如下:
/*
* @author unascribed
* @see java.io.ObjectOutputStream
* @see java.io.ObjectInputStream
* @see java.io.ObjectOutput
* @see java.io.ObjectInput
* @see java.io.Externalizable
* @since JDK1.1
*/
public interface Serializable {
}
??Java从JDK1.1开始支持对象的序列化机制,有上图的源码可知,Serializable接口没有声明任何方法,实现该接口的Java类不需要对任何方法提供实现(默认情况下,定制序列化时除外),**因此,该接口仅仅是一个mark interface(标记接口)”,实现该接口意味着告知JVM该对象可以序列化。**Java序列化机制要求所有具备序列化的对象必须实现该接口,否则是不能被序列化的,如果对于没有实现该接口的对象进行序列化时,Java API会抛出异常,无法进行序列化。
transient关键字
??瞬时变量,指的是被transient关键字修饰的变量,该关键字表示为瞬时的,即不做持久化处理的,以此来控制属性是否被包含进入序列化的字节流中。
??Serializable接 口提供了默认的序列化行为,在默认情况下,开发人员只需实现该接口,无需进行其他额外的操作,即可实现的对象的序列化。
默认只对对象中非静态的字段以及非瞬时的字段进行序列化,其他的字段是不允许被序列化的。
??这是因为,静态变量是类变量,属于整个类,并非专属于每个对象实例,因此,不序列化静态变量时合理的。瞬时变量,指的是被transient关键字修饰的变量,该关键字表示为瞬时的,即不做持久化处理的,以此来控制属性是否被包含进入序列化的字节流中。因此,在序列化时,排除transient关键字修饰的属性也是合理的。
??这种情况的具体表现就是,在序列化的有序字节流中没有保存不能被序列化的字段的状态,因此,在反序列化时,这些字段状态是不能被重建的。但是有一点需要注 意的是,经过反序列化后的对象,除了对可被序列化的字段状态进行重建之外,其他的没有被序列化的字段作为对象属性的一部分,也在对象重建时得以初始化。但 是这些字段的状态是不被保存的,重建后的这些属性仅仅是系统赋予的默认值,而非保存了对象序列化之前的状态。
实现Serializable接口除了提供默认的序列化方式之外,同样允许开发人员定制序列化,即通过实现以下相同签名的方法来实现:
序列化方法:
private void writeObject(java.io.ObjectOutputStream out) throws IOException
反序列化方法:
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException;
其中,writeObject方法用于定制序列化,readObject方法用于实现定制反序列化。
serialVersionUID
??每个实现Serializable接口的对象都有一个serialVersionUID,长整型,64位,唯一标示了该序列化对象。在类定义中,可以显示的定义该静态变量,也可以不定义。在不定义的情况下,Java编译器会隐式的生成该变量。强烈建议显示定义。那么,该变量有什么用途呢?反序列化兼容控制,serialVersionUID相同才能进行反序列化。例如:远程主机需要反序列化对象C,
您可能关注的文档
- 主题班会之安全教育--.pptx
- 主体结构专项质量培训课程.ppt
- 主题班会课件:五官的旅行——沟通无极限.ppt
- 义务教育学校管理标准(试行).pptx
- 乐捐管理制度.doc
- 主题阅读单元整本书探究阅读《试说新语》课程设置及实施流程.pptx
- 主题班会—保护水资源.ppt
- 乘安全之舟-扬生命之帆——中学生安全教育主题班会.ppt
- ISO9001质量管理体系通用文件培训.ppt
- ISO9001标准的理解和实施培训教材.doc
- 2024数字素养协同理论视角下的教师数字化教学能力提升探析.docx
- 2024作文名校月考范文汇编精选附审题指导参考立意.docx
- 2024新教材背景下高中语文大单元教学策略研究.docx
- 2024一名老教师的课堂实况和备课笔记有感.docx
- 2024数字素养智能技术支持的教师数字化教学研究与创新探析.docx
- 2024教研心得:以高中选择性必修上册第三单元为例三步走定位单元语文学科大概念.docx
- 2024教学心得:例谈高中语文整本书阅读的考查方向.docx
- 2024高考作文如何做到语言深刻.docx
- 2024教育教学因时而变因文而变因人而变语文教学策略的调整.docx
- 2024新学期三向写作做更高维的思考者.docx
最近下载
- 2024年中国石油东方地球物理勘探有限责任公司秋季高校毕业生招聘270人(甘肃有岗)笔试备考试题及答案解析.docx
- 天马旅游汽车公司管理职责、制度汇编.doc
- 从领导力角度说耿彦波——.ppt
- 唐山介绍PPT(唐山简介经典版).pptx
- 《我的家庭贡献与责任》第一课时小学道德与法治四年级上册PPT课件.pptx VIP
- 保养手册_迈腾b7l使用说明书.pdf
- 2024-2025人教版3三年级数学上册(全册)优秀测试卷(附答案).doc
- (2024年1月)广西各市房屋工程造价指标.doc VIP
- 2022年11月苏州城市学院下半年公开招聘27名管理岗位工作人员笔试参考题库含答案解析.docx
- 2023年义务教育初中英语新课标《英语新课程标准》解读ppt课件.pptx VIP
文档评论(0)