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

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

 2010-05-05 00:00:00 来源:WEB开发网   
核心提示: 到现在为止,还没有看到什么新鲜的或令人兴奋的事情,关于 Java 对象序列化您不知道的 5 件事(4),但是这是一个很好的出发点,我们将使用 Person 来发现您可能不 知道的关于 Java 对象序列化 的 5 件事,会发生什么事情,如清单 3 所示,1. 序列化允许重构序列化允许一定数量的类

到现在为止,还没有看到什么新鲜的或令人兴奋的事情,但是这是一个很好的出发点。我们将使用 Person 来发现您可能不 知道的关于 Java 对象序列化 的 5 件事。

1. 序列化允许重构

序列化允许一定数量的类变种,甚至重构之后也是如此,ObjectInputStream 仍可以很好地将其读出来。

Java Object Serialization 规范可以自动管理的关键任务是:

将新字段添加到类中

将字段从 static 改为非 static

将字段从 transient 改为非 transient

取决于所需的向后兼容程度,转换字段形式(从非 static 转换为 static 或从非 transient 转换为 transient)或者删除字段需要额外的消息传递。

重构序列化类

既然已经知道序列化允许重构,我们来看看当把新字段添加到 Person 类中时,会发生什么事情。

如清单 3 所示,PersonV2 在原先 Person 类的基础上引入一个表示性别的新字段。

清单 3. 将新字段添加到序列化的 Person 中

enum Gender 
{ 
  MALE, FEMALE 
} 
 
public class Person 
  implements java.io.Serializable 
{ 
  public Person(String fn, String ln, int a, Gender g) 
  { 
    this.firstName = fn; this.lastName = ln; this.age = a; this.gender = g; 
  } 
  
  public String getFirstName() { return firstName; } 
  public String getLastName() { return lastName; } 
  public Gender getGender() { return gender; } 
  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 setGender(Gender value) { gender = value; } 
  public void setAge(int value) { age = value; } 
  public void setSpouse(Person value) { spouse = value; } 
 
  public String toString() 
  { 
    return "[Person: firstName=" + firstName + 
      " lastName=" + lastName + 
      " gender=" + gender + 
      " age=" + age + 
      " spouse=" + spouse.getFirstName() + 
      "]"; 
  }   
 
  private String firstName; 
  private String lastName; 
  private int age; 
  private Person spouse; 
  private Gender gender; 
}

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

Tags:关于 Java 对象

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