快速业务通道

关于Java对象序列化您不知道的5件事 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
xy 中,将它放入到一个流中,然后在 反序列化时再进行解包。

清单 5. 你完整了我,我代替了你

class PersonProxy    implements java.io.Serializable {    public PersonProxy(Person orig)    {      data = orig.getFirstName() + "," + orig.getLastName()  + "," + orig.getAge();      if (orig.getSpouse() != null)      {        Person spouse = orig.getSpouse();        data = data + "," + spouse.getFirstName() + ","  + spouse.getLastName() + ","         + spouse.getAge();      }    }    public String data;    private Object readResolve()      throws java.io.ObjectStreamException    {      String[] pieces = data.split(",");      Person result = new Person(pieces[0], pieces[1],  Integer.parseInt(pieces[2]));      if (pieces.length > 3)      {        result.setSpouse(new Person(pieces[3], pieces[4],  Integer.parseInt         (pieces[5])));        result.getSpouse().setSpouse(result);      }      return result;    } } public class Person    implements java.io.Serializable {    public Person(String fn, String ln, int a)    {      this.firstName = fn; this.lastName = ln; this.age =  a;    }    public String getFirstName() { return firstName; }    public String getLastName() { return lastName; }    public int getAge() { return age; }    public Person getSpouse() { return spouse; }    private Object writeReplace()      throws java.io.ObjectStreamException    {      return new PersonProxy(this);    }    public void setFirstName(String value) { firstName =  value; }    public void setLastName(String value) { lastName =  value; }    public void setAge(int value) { age = value; }    public void setSpouse(Person value) { spouse = value;  }    public String toString()    {      return "[Person: firstName=" + firstName +        " lastName=" + lastName +        " age=" + age +        " spouse=" + spouse.getFirstName() +        "]";    }    private String firstName;    private String lastName;    private int age;    private Person spouse; }

关于Java对象序列化您不知道的5件事(6)

时间:2010-11-20 IBM Ted Neward

注意,PersonProxy 必须跟踪 Person 的所有数据。这通常意味着代理需要 是 Person 的一个内部类,以便能访问 private 字段。有时候,代理还需要追 踪其他对象引用并手动序列化它们,例如 Person 的 spouse。

这种技巧是少数几种不需要读/写平衡的技巧之一。例如,一个类被重构成另 一种类型后的版本可以提供一个 readResolve 方法,以便静默地将被序列化的 对象转换成新类型。类似地,它可以采用 writeReplace 方法将旧类序列化成新 版本。

5. 信任,但要验证

认为序列化流中的数据总是与最初写到流中的数据一致,这没有问题。但是 ,正如一位美国前总统所

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号