《JAVA对象的序列化与反序列化(详细)》.ppt

《JAVA对象的序列化与反序列化(详细)》.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
9.3序列化对象图 在例程9-2中以下代码建立了他们的关联关系: else if(args.length>0 && args[0].equals("Customer2")){ Customer2 customer=new Customer2("Tom"); Order2 order1=new Order2("number1",customer); Order2 order2=new Order2("number2",customer); customer.addOrder(order1); customer.addOrder(order2); object=customer; } Customer2对象 Order2对象 Order2对象 9.3序列化对象图 序列化customer2对象时是否会序列化与它关联的对象呢? 序列化对象时,会序列化对象customer2以及所有从customer2直接或间接导航到的对象。 Customer2对象 Order2对象 Order2对象 9。2。2控制序列化的行为 如果用户希望控制序列化行为,可以在序列化类中提供以下方法: private void writeObject(ObjectOutputStream ou) 在该方法中可以调用ObjectOutputStream拥有的defaultWriteObject(ObjectOutputStream ou),使得对象输出流先执行默认的序列化操作 private void readObject(ObjectInputStream in) 在该方法中同样可以调用ObjectInputStream的defaultReadObject()方法。 9。2。2控制序列化的行为 以下情况下,可以考虑用户自定义的序列化方式,从而控制序列化行为: 确保序列化安全性,对敏感信息加密后再序列化,反序列化时需解密。 确保对象的成员变量符合正确的约束条件 优化序列化的性能。 便于更好的封装类的内部数据结构,确保类的接口不会被类的内部实现所束缚 9.2.2控制序列化的行为 import java.io.*; public class Customer3 implements Serializable { private static int count; //用于计算Customer3对象的数目 private static final int MAX_COUNT=1000; private String name; private transient String password; static{ System.out.println("调用Customer3类的静态代码块"); } public Customer3(){ System.out.println("调用Customer3类的不带参数的构造方法"); count++; } public Customer3(String name, String password) { System.out.println("调用Customer3类的带参数的构造方法"); this.name=name; this.password=password; count++; } 序列化的安全性 9。2。2控制序列化的行为 /** 加密数组,将buff数组中的每个字节的每一位取反 * 例如13的二进制取反后 */ private byte[] change(byte[] buff){ for(int i=0;i<buff.length;i++){ int b=0; for(int j=0;j<8;j++){ int bit=(buff[i]>>j & 1)==0 ? 1:0; b+=(1<<j)*bit; } buff[i]=(byte)b; } return buff; } 9.2.2控制序列化的行为 private void writeObject(ObjectOutputStream stream)throws IOException { stream.defaultWriteObject(); //先按默认方式序列化 stream.writeObject(change(password.getBytes())); stream.writeInt(coun

文档评论(0)

tangzhaoxu123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档