序列化:Serializable和Externalizable

Externalizable是深度定製序列化。如果同時實現了這兩個接口,則只會執行Externalizable。

 

Serializable可以僅僅標記可序列化,使用JDK默認的序列化方法,也可以定製。實現方法:

private void writeObject(ObjectOutputStream oos) { // oos.defaultWriteObject(); // Write/save additional fields oos.writeUTF(value); } private void readObject(ObjectInputStream ois) { // ois.defaultReadObject(); // Read/initialize additional fields value = ois.readUTF() }

Externalizable必須實現方法:

void writeExternal(ObjectOutput out) { out.writeUTF(value) } void readExternal(ObjectInput input) { value = input.readUTF() }

如果實現是深度定製序列化,但是用Serializable的writeObject方法實現,它不一定起作用。

 

注意幾點:

1、靜態static成員不被序列化

2、如果一個可序列化的對象包含對某個不可序列化的對象的引用,那麼整個序列化操作將會失敗,並且會拋出一個NotSerializableException

3、transient修飾的字段不被序列化

4、父類如果不可序列化,子類不會序列化父類的成員,除非在子類中顯式序列化。父類可序列化,子類也需要調用super的序列化方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章