欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    对象的序列化与反序列化.ppt

    • 资源ID:5965179       资源大小:266KB        全文页数:16页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    对象的序列化与反序列化.ppt

    Java对象的序列化与反序列化,本章内容,对象序列化与反序列化的基本概念实现序列化的基本过程 Serializable和Externalizable接口 ObjectOutputStream和ObjectInputStream自定义序列化的两种方式默认序列化方式与自定义序列化方式的比较序列化类不同版本的序列化兼容性,对象序列化,对象序列化:将Java对象转化成二进制字节流的过程。对象反序列化:将二进制字节流恢复为Java对象的过程。对象序列化的主要用途:将对象的字节序列永久的保存到硬盘上,通常存放在一个文件中。(2)在网络中传输对象的字节序列。,Serializable和Externalizable接口,序列化的过程:只有实现了Serializable和Externalizable接口的类的对象才能进行序列化操作。Externalizable接口继承自Serializable口,实现Externalizable接口的类需要自行控制序列化的行为。实现Serializable接口的类采用默认的序列化方式。JDK类库中的部分类(String,封装类和Date类等)都实现了Serializable接口。,ObjectInputStream和ObjectOutputStream,(2)对象输入和输出流构造方法:ObjectInputStream(InputStream in)ObjectOutputStream(OutputStream out)见源文件:ObjectSerTest.java,ObjectInputStream,ObjectInputStream按照默认方式进行反序列化时,具有以下特点:(1)如果内存中对象所属的类还没有加载,那么会加载并初始化这个类。如果在classpath中找不到相应的类文件,抛出ClassNotFoundException。(2)在反序列化时不会调用类的任何构造方法。,对象序列化,注意的问题:(1)序列化和反序列化的顺序要一致(2)保存对象的文件名一般不要用.txt文件,换成.obj或.ser文件最好,对象序列化,ObjectOutputStream只能对实现了Serializable接口的类的对象进行默认的序列化操作,这种操作仅仅为对象的非transient和非static的实例变量进行序列化。见源文件:ObjectSerTest1.java 注意:静态变量属于类,不属于对象。静态变量在类加载的时候初始化,将含有静态变量的对象的序列化和反序列化分开在不同的进程中,以得到正确结果。见源文件:WriteStudent.java ReadStudent.java,transient成员变量,transient变量不能被序列化,那么可以修饰以下类型的变量。(1)实例变量不代表对象的固有的内部数据,仅仅代表具有一定逻辑含义的临时数据。.private String firstName;private String lastName;private transient String fullName;(2)实例变量表示一些比较敏感的信息(密码等),出于安全方面的原因不希望被序列化。(3)实例变量需要按照用户自定义的方式序列化,如经过加密后再序列化。,具有关联关系的对象之间的序列化,Class Teacher implements Serializable private Set stu=new HashSet();当序列化Teacher对象时,系统还会序列化Teacher所关联的其他可序列化的对象(Student对象)。,自定义序列化方式-Serializable接口,自定义序列化方式,在可序列化类中定义下面两个方法:private void writeObject(ObjectOutputStream out)throws IOExceptionprivate void readObject(ObjectInputStream in)throws IOException,ClassNotFoundException 注意:上述两个方法不是接口中定义的方法,自定义序列化方式-Serializable接口,自定义序列化方式常用于以下情况:确保序列化的安全性,对敏感信息加密后再序列化,在反序列化时先解密。见源文件:ObjSerSecurity.java(2)确保对象的成员变量符合正确的约束条件。见源文件:ObjSerConstraint.java(3)能够优化序列化的性能 见源文件:ObjSerCapacity.java ObjSerOptimizeCapacity.java 注意:需要按自定义方式序列化的成员变量,是否定义为 transient类型无关紧要。,自定义序列化方式-Externalizable接口,Externalizable接口继承自Serializable接口。如果一个类实现了Externalizable接口,那么将完全由这个类控制自身的序列化行为。public void writeExternal(ObjectOutput out)throws IOException public void readExternal(ObjectInput in)throws IOException,ClassNotFoundException 注意:对实现了Externalizable接口的类的对象进行反序列化操作时,会调用该类无参的构造方法 见源文件:ObjExternalSer.java,默认序列化与自定义序列化的比较,默认序列化方式的不足对象当中的不易对外公开的敏感数据进行序列化,安全性低。(2)不会检查对象的成员变量是否合乎正确的约束条件。(3)默认的序列化方式需要对对象图进行递归遍历,如果对象图很复杂,会消耗很多空间和时间,甚至引起Java虚拟机堆栈溢出。自定义序列化方式两种:实现Serializable接口,并且提供private的writeObject()和readObject()。(2)实现Externalizable接口,实现writeExternal()和readExternal()方法,必须提供public无参的构造方法。,可序列化类的不同版本的序列化兼容性,实现Serializable接口的类都有一个表示序列化版本标识符的静态常量。private static final long serialVersionUID;JDK安装目录的bin目录下有个serialver.exe用于查看serialVersionUID。用法:serialver 字节码serialVersionUID依赖于内部的实现细节与编译器。,可序列化类的不同版本的序列化兼容性,建议在可序列化类中显示的定义serialVerUID。在某些场合,希望类的不同版本对序列化兼容,需要确保类的不同版本具有相同的serialVerUID。在某些场合,不希望类的不同版本序列化兼容,需要确保类的不同版本具有不同的serialVerUID。,

    注意事项

    本文(对象的序列化与反序列化.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开