版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、关于对象的序列化与反序列化第1页,共17页,2022年,5月20日,22点33分,星期三本章内容对象序列化与反序列化的基本概念实现序列化的基本过程 Serializable和Externalizable接口 ObjectOutputStream和ObjectInputStream自定义序列化的两种方式默认序列化方式与自定义序列化方式的比较类不同版本的序列化兼容性第2页,共17页,2022年,5月20日,22点33分,星期三对象序列化对象序列化:将Java对象转化成二进制字节流的过程。对象反序列化: 将二进制字节流恢复为Java对象的过程。对象序列化的主要用途:将对象的字节序列永久的保存到硬盘上
2、,通常存放在一个文件中。(2) 在网络中跨虚拟机传递对象。第3页,共17页,2022年,5月20日,22点33分,星期三Serializable和Externalizable接口序列化的过程:只有实现了Serializable和Externalizable接口的类的对象才能进行序列化操作。 Externalizable接口继承自Serializable口, 实现Externalizable接口的类需要自行控制序列化的行为。 实现Serializable接口的类采用默认的序列化方式。 JDK类库中的部分类(String,封装类和Date类等)都实现了Serializable接口。第4页,共17页
3、,2022年,5月20日,22点33分,星期三ObjectInputStream和ObjectOutputStream(2) 对象输入和输出流构造方法:ObjectInputStream(InputStream in)ObjectOutputStream(OutputStream out) 见源文件:ObjectSerTest.java第5页,共17页,2022年,5月20日,22点33分,星期三ObjectInputStreamObjectInputStream按照默认方式进行反序列化时,具有以下特点:(1) 如果内存中对象所属的类还没有加载,那么会加载并初始化这个类。如果在classpat
4、h中找不到相应的类文件,抛出ClassNotFoundException。(2) 在反序列化时不会调用类的任何构造方法。第6页,共17页,2022年,5月20日,22点33分,星期三对象序列化注意的问题: (1) 序列化和反序列化的顺序要一致 (2) 保存对象的文件名一般不要用.txt文件,换成.obj或.ser文件最好第7页,共17页,2022年,5月20日,22点33分,星期三对象序列化 ObjectOutputStream只能对实现了Serializable接口的类的对象进行默认的序列化操作,这种操作仅仅为对象的非transient和非static的实例属性进行序列化。 见源文件:非tr
5、ansient/ObjectSerTest1.java 注意:静态属性属于类,不属于对象。静态属性在类加载的时候初始化,将含有静态属性的对象的序列化和反序列化分开在不同的进程中,以得到正确结果。 见源文件:非transient/WriteStudent.java 非transient/ReadStudent.java 第8页,共17页,2022年,5月20日,22点33分,星期三transient成员属性transient属性不能被序列化,那么可以修饰以下类型的属性。(1) 实例属性不代表对象的固有的内部数据,仅仅代表具有一定逻辑含义的临时数据。 . private String firstN
6、ame; private String lastName; private transient String fullName;(2) 实例属性表示一些比较敏感的信息(密码等), 出于安全方面的原因不希望被序列化。(3) 实例属性需要按照用户自定义的方式序列化,如经过加密后再序列化。第9页,共17页,2022年,5月20日,22点33分,星期三具有关联关系的对象之间的序列化Class Teacher implements Serializable private Set stu=new HashSet();当序列化Teacher对象时,系统还会序列化Teacher所关联的其他可序列化的对象(S
7、tudent对象)。 ABCEDF第10页,共17页,2022年,5月20日,22点33分,星期三自定义序列化方式-Serializable接口自定义序列化方式,在可序列化类中定义下面两个方法:private void writeObject(ObjectOutputStream out) throws IOExceptionprivate void readObject(ObjectInputStream in) throws IOException,ClassNotFoundException 注意:上述两个方法不是java.io.Serializable接口中定义的方法第11页,共17页
8、,2022年,5月20日,22点33分,星期三自定义序列化方式-Serializable接口自定义序列化方式常用于以下情况:确保序列化的安全性,对敏感信息加密后再序列化,在反序列化时先解密。 见源文件: ObjSerSecurity.java(2)确保对象的成员属性符合正确的约束条件。 见源文件: ObjSerConstraint.java(3)能够优化序列化的性能 见源文件:性能优化/ ObjSerCapacity.java 性能优化/ObjSerOptimizeCapacity.java 注意:需要按自定义方式序列化的成员属性,是否定义为 transient类型无关紧要。第12页,共17页
9、,2022年,5月20日,22点33分,星期三自定义序列化方式-Externalizable接口 Externalizable接口继承自Serializable接口。如果一个类实现了Externalizable接口,那么将完全由这个类控制自身的序列化行为。public void writeExternal(ObjectOutput out)throws IOException public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException 注意:对实现了Externalizable接口的类的对
10、象进行反序列化操作时,会调用该类无参的构造方法 见源文件:ObjExternalSer.java第13页,共17页,2022年,5月20日,22点33分,星期三默认序列化与自定义序列化的比较默认序列化方式的不足对象当中的不易对外公开的敏感数据进行序列化,安全性低。(2) 不会检查对象的成员属性是否合乎正确的约束条件。(3) 默认的序列化方式需要对对象图进行递归遍历,如果对象图很复杂,会消耗很多空间和时间,甚至引起Java虚拟机堆栈溢出。自定义序列化方式两种:实现Serializable接口,并且提供private的writeObject()和readObject()。(2) 实现Externa
11、lizable接口,实现writeExternal()和readExternal()方法,必须提供public无参的构造方法。第14页,共17页,2022年,5月20日,22点33分,星期三可序列化类的不同版本的序列化兼容性 实现Serializable接口的类都有一个表示序列化版本标识符的静态常量。 private static final long serialVersionUID;JDK安装目录的bin目录下有个serialver.exe用于查看serialVersionUID。 用法:serialver 字节码serialVersionUID依赖于内部的实现细节与编译器。第15页,共17页,2022年,5月20日,22点33分,星期三可序列化类的不同版本的序列化兼容性 建议在可序列化类中显示的定义seria
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026人工智能在医疗健康领域的应用前景与研究评估报告
- 2026年数据线行业市场增长报告
- 2026年体育运动行业加盟体系完善与市场分析报告
- 2026年新能源汽车充电桩行业市场分析报告及未来五年发展趋势
- 2026青岛港口行业市场供需分析及投资评估规划分析研究报告
- 2026年电力行业供应链绿色化报告
- 2026年农业品牌建设报告:农产品上行与电商直播的协同效应分析
- 2026年行业白领通勤需求与出行方式研究报告
- 2026年网络安全行业算力需求与云计算防护报告001
- 精装修工程材料供应协议三篇
- 7 运动的快慢 课件(内嵌视频)2026-2027学年四年级科学上册苏教版
- 智能IP广域网(AI WAN)研究报告(2026年)
- EPC总承包工程竣工验收报告
- 人教版英语九年级上册Unit4单词讲解课件
- 国家卫健委公立医院绩效考核指标体系2026版操作手册
- 酒店人员绩效考核管理办法
- 尚德守法 共享食安主题班会
- 中考命题人才库模拟考试试题及答案
- 26年老年记录举证规范培训课件
- 2026年功能教室使用与管理制度
- 护理礼仪与人文关怀
评论
0/150
提交评论