- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java序列化原理机制浅谈
什么是序列化?
java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以读取字节流中的信息来重构一个相同的对象。序列化机制在java中有着广泛的应用,EJB、RMI、hessian等技术都是以此为基础的。?
?
so,序列化一般用于以下场景:?1:永久性保存对象,保存对象的字节序列到本地文件或者数据库中
2:通过序列化以字节流的形式使对象在网络中进行传递和接收;
3:通过序列化在进程间传递对象。?
?
接下来我们将从序列化机制原理等方面进行剖析
?
如何序列化一个对象
类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。
? 1:我们先来看看一个例子将对象序列化为一个字节流
?
我们将对象序列化并输出。ObjectOutputStream能把Object输出成Byte流。---上图显示的20行-26行我们将Byte流暂时存储到temp.out文件里。
而在33行-39行,我们利用反序列化,根据字节流重建对象。
?
从上面代码中,我们不难看出,序列化和反序列化的俩个主要类:ObjectOutputStream、ObjectInputStream。
?
序列化后的内容
通过上面的例子我们知道,对象被序列化存在至文件temp.out中,我们可以通过工具UltraEdit以16进制方式打开该文件,看看它里面是以什么样的形式存在组织我们的对象的。
?
?? ? ? ? ??
每一行分号后面的内容都是前面16进制码的注释。
对于这些我们先随意YY下,这些内容的组织方式应该是:
1:对象类型描述
2:对象属性类型描述
3:对象属性值
?
现在我们将以一个全面的例子来说明该问题:代码-1.1
?
?
[javascript]? HYPERLINK /morethinkmoretry/article/details/5929345 \o view plain view plain HYPERLINK /morethinkmoretry/article/details/5929345 \o copy copy
class?parent?implements?Serializable?{??
????int?parentVersion?=?10;??
}??
class?contain?implements?Serializable?{??
????int?containVersion?=?11;??
}??
public?class?SerialTest?extends?parent?implements?Serializable?{??
????int?????version?=?66;??
????contain?con?????=?new?contain();??
????public?int?getVersion()?{??
????????return?version;??
????}??
????public?static?void?main(String?args[])?throws?IOException?{??
????????FileOutputStream?fos?=?new?FileOutputStream(temp_1.out);??
????????ObjectOutputStream?oos?=?new?ObjectOutputStream(fos);??
????????SerialTest?st?=?new?SerialTest();??
????????oos.writeObject(st);??
????????oos.flush();??
????????oos.close();??
????}??
}??
?
?
temp_1.out文件内容如下:
?
?
先对上面图简单注释下:0000000h-000000c0h表示行号(我们一次可以称为第一行,第二行…………),0~f表示列;行后面的文字表示对这行16进制的解释。
?
我们来仔细看看这些字节都是些说明东西。第一行的:0列-4列
1.AC ED: STREAM_MAGIC. 声明使用了序列化协议. 可以理解为实现了Serializable类
2.00 05: STREAM_VERSION. 序列化协议版本.
3.0x73: TC_OBJECT. 声明这是一个新的对象.?
因此第一步存储的就是序列化的描述
您可能关注的文档
- emule客户端与客户端通信协议详解.docx
- EP1C12与EDA开发平台资源I_O接口对照表.doc
- ENSON光端机操作使用手册.doc
- EPON工程师培训笔试题2008-4(a).doc
- EPON物理层关键技术1.doc
- EPON网络光纤建设施工管理规范.doc
- DEWESOFTX和SIRIUS区别于其他厂家的优势.docx
- EOe-1用户简要操作手册.doc
- ERP与MIS的区别.doc
- ESD静电防护设计与生产保证.doc
- 2025年无人机低空医疗物资投放社会效益报告.docx
- 2025年再生塑料行业包装回收利用产业链重构研究.docx
- 《AI眼镜周边产品市场机遇:2025年终端销售与需求增长洞察》.docx
- 2025年坚果加工行业深加工技术突破与市场拓展策略报告.docx
- 2025年通信芯片行业技术竞争与未来趋势报告.docx
- 《2025年生鲜电商配送冷链事故分析与预防措施》.docx
- 《商业航天融资新趋势2025民营卫星企业资本涌入估值分析市场动态》.docx
- 2025年能源绿色健康行业创新技术与市场应用报告.docx
- 2025年无人机低空医疗救援通信方案分析报告.docx
- 2025年烹饪机器人行业市场集中度分析报告.docx
原创力文档


文档评论(0)