Java Serializable key points

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

相關文章
相關標籤/搜索