1. 必須implements Serializable;html
2. 基本算法是:java
a. 寫出當前類的meta data算法
b. 遞歸調用寫出,直至java.lang.Object, 父類的meta dataoracle
c. 寫出實例字段信息code
3. 若是類中某個字段不能序列化,或者不須要序列化,將該字段標記爲transistent。 除去transistent的其餘字段, 包括private的,都會被序列化;htm
4. 對於已序列化的對象,增長/減小字段或者方法,反序列化會報錯java.io.InvalidClassException;若是這樣的變化是兼容的,那麼能夠提供一個字段serialVersionUID,給定肯定的一個值;若是是類的層級改變了,那麼也是不能反序列化的;對象
5. 對象序列化和反序列化,可經過調用ObjectInputStream.readObject()/ObjectOutputStream.writeObject遞歸
FileOutputStream fos = new FileOutputStream("temp.out"); ObjectOutputStream oos = new ObjectOutputStream(fos); SerialTest st = new SerialTest(); oos.writeObject(st); oos.flush(); oos.close();
FileInputStream fis = new FileInputStream("temp.out"); ObjectInputStream oin = new ObjectInputStream(fis); TestSerial ts = (TestSerial) oin.readObject(); System.out.println("version="+ts.version);
6. 若是要對序列化作更多的控制,能夠實現如下的方法:it
private void writeObject(ObjectOutputStream out) throws IOException;
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;
參考:io
1. https://www.javaworld.com/article/2072752/the-java-serialization-algorithm-revealed.html
2. http://www.oracle.com/technetwork/articles/java/javaserial-1536170.html