WEB开发网
开发学院软件开发Java 关于 Java 对象序列化您不知道的 5 件事 阅读

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

 2010-05-05 00:00:00 来源:WEB开发网   
核心提示: 为了 “hook” 序列化过程,我们将在 Person 上实现一个 writeObject 方法;为了 “hook” 反序列化过程,关于 Java 对象序列化您不知道的 5 件事(6),我们将在同一个类上实现一个 readObject 方法,重要的

为了 “hook” 序列化过程,我们将在 Person 上实现一个 writeObject 方法;为了 “hook” 反序列化过程,我们将在同一个类上实现一个 readObject 方法。重要的是这两个方法的细节要正确 — 如果访问修改方法、参数或名称不同于清单 4 中的内容,那么代码将不被察觉地失败,Person 的 age 将暴露。

清单 4. 模糊化序列化数据

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; } 
   
  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; } 
 
  private void writeObject(java.io.ObjectOutputStream stream) 
    throws java.io.IOException 
  { 
    // "Encrypt"/obscure the sensitive data 
    age = age << 2; 
    stream.defaultWriteObject(); 
  } 
 
  private void readObject(java.io.ObjectInputStream stream) 
    throws java.io.IOException, ClassNotFoundException 
  { 
    stream.defaultReadObject(); 
 
    // "Decrypt"/de-obscure the sensitive data 
    age = age << 2; 
  } 
   
  public String toString() 
  { 
    return "[Person: firstName=" + firstName + 
      " lastName=" + lastName + 
      " age=" + age + 
      " spouse=" + (spouse!=null ? spouse.getFirstName() : "[null]") + 
      "]"; 
  }    
 
  private String firstName; 
  private String lastName; 
  private int age; 
  private Person spouse; 
}

上一页  1 2 3 4 5 6 7 8  下一页

Tags:关于 Java 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接