天天看點

序列化與反序列化 實作序列化的方式

方式一:  implements Serializable 這個比較常用, 對于我們想要保護的某些屬性使用transient修飾。

這樣的話我們就不能把這個屬性值寫入磁盤了,儲存對象使用ObjectOutputStream 的writeObject(obj) 方法;

讀取就是翻過啦,使用輸入流ObjectInputStream的 readObject

方式二: implements Externalizable

說一下Externalizable接口 ,Externalizable接口繼承了Serializable,

但是有提供了兩個方法

public void writeExternal(ObjectOutput out) throws IOException {}和

public void readExternal(ObjectInput in) throws IOException,

   ClassNotFoundException {}

先說一下實作Externalizable接口的類,它預設對象的屬性值時transient (瞬時)的不會被序列化

但是使用上邊的兩個方法可以讓我們自由的去實作我們想要的序列化屬性,

比如我有一個屬性String  name 想序列化

public void writeExternal(ObjectOutput out) throws IOException {

     out.writeObject(name);

}

public void readExternal(ObjectInput in) throws IOException,

   ClassNotFoundException {

    String str =  (String)in.readObject();

}

我們必須在這兩個方法裡分别write 和read 不然 在我們序列化和反序列化中就會出現異常

 implements Externalizable 實作序列化有點麻煩,但是我們可以很好的控制我們需要實作序列化的地方。