第2章 对象序列化与反序列化

第2章 对象序列化与反序列化

ID:20203538

大小:1.21 MB

页数:16页

时间:2018-10-11

第2章 对象序列化与反序列化_第1页
第2章 对象序列化与反序列化_第2页
第2章 对象序列化与反序列化_第3页
第2章 对象序列化与反序列化_第4页
第2章 对象序列化与反序列化_第5页
资源描述:

《第2章 对象序列化与反序列化》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Java对象的序列化与反序列化本章内容对象序列化与反序列化的基本概念实现序列化的基本过程Serializable和Externalizable接口ObjectOutputStream和ObjectInputStream自定义序列化的两种方式默认序列化方式与自定义序列化方式的比较序列化类不同版本的序列化兼容性对象序列化对象序列化:将Java对象转化成二进制字节流的过程。对象反序列化:将二进制字节流恢复为Java对象的过程。对象序列化的主要用途:将对象的字节序列永久的保存到硬盘上,通常存放在一个文件中。(2)在网络中传输对象的字节序列。Serializa

2、ble和Externalizable接口序列化的过程:只有实现了Serializable和Externalizable接口的类的对象才能进行序列化操作。Externalizable接口继承自Serializable口,实现Externalizable接口的类需要自行控制序列化的行为。实现Serializable接口的类采用默认的序列化方式。JDK类库中的部分类(String,封装类和Date类等)都实现了Serializable接口。ObjectInputStream和ObjectOutputStream(2)对象输入和输出流构造方法:ObjectI

3、nputStream(InputStreamin)ObjectOutputStream(OutputStreamout)见源文件:ObjectSerTest.javaObjectInputStreamObjectInputStream按照默认方式进行反序列化时,具有以下特点:(1)如果内存中对象所属的类还没有加载,那么会加载并初始化这个类。如果在classpath中找不到相应的类文件,抛出ClassNotFoundException。(2)在反序列化时不会调用类的任何构造方法。对象序列化注意的问题:(1)序列化和反序列化的顺序要一致(2)保存对象的文

4、件名一般不要用.txt文件,换成.obj或.ser文件最好对象序列化ObjectOutputStream只能对实现了Serializable接口的类的对象进行默认的序列化操作,这种操作仅仅为对象的非transient和非static的实例变量进行序列化。见源文件:ObjectSerTest1.java注意:静态变量属于类,不属于对象。静态变量在类加载的时候初始化,将含有静态变量的对象的序列化和反序列化分开在不同的进程中,以得到正确结果。见源文件:WriteStudent.javaReadStudent.javatransient成员变量transie

5、nt变量不能被序列化,那么可以修饰以下类型的变量。(1)实例变量不代表对象的固有的内部数据,仅仅代表具有一定逻辑含义的临时数据。………..privateStringfirstName;privateStringlastName;privatetransientStringfullName;(2)实例变量表示一些比较敏感的信息(密码等),出于安全方面的原因不希望被序列化。(3)实例变量需要按照用户自定义的方式序列化,如经过加密后再序列化。具有关联关系的对象之间的序列化ClassTeacherimplementsSerializable{…………priv

6、ateSetstu=newHashSet();}当序列化Teacher对象时,系统还会序列化Teacher所关联的其他可序列化的对象(Student对象)。ABCEDGHF自定义序列化方式-Serializable接口自定义序列化方式,在可序列化类中定义下面两个方法:privatevoidwriteObject(ObjectOutputStreamout)throwsIOExceptionprivatevoidreadObject(ObjectInputStreamin)throwsIOException,Clas

7、sNotFoundException注意:上述两个方法不是java.io.Serializable接口中定义的方法自定义序列化方式-Serializable接口自定义序列化方式常用于以下情况:确保序列化的安全性,对敏感信息加密后再序列化,在反序列化时先解密。见源文件:ObjSerSecurity.java(2)确保对象的成员变量符合正确的约束条件。见源文件:ObjSerConstraint.java(3)能够优化序列化的性能见源文件:ObjSerCapacity.javaObjSerOptimizeCapacity.java注意:需要按自定义方式序列

8、化的成员变量,是否定义为transient类型无关紧要。自定义序列化方式-Externalizable接口E

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。