JAVA筆記——序列化
所謂的對象序列化(在很多地方也被成為串行化),是指將對象轉換成二進制數據流的一種實現手段。通過將對象序列化,可以方便地實現對象的傳輸及保存。
在Java中提供有ObjectInputStream與ObjectOutputStream這兩個類用于序列化對象的操作。這兩個類是用于存儲和獨缺對象的輸入輸出流類,只要把對象中的所有成員變量都存儲起來,就等于保存了這個對象,之后從保存的對象之中再將對象讀取進來就可以繼續使用此對象。ObjectInputStream類與ObjectOutputStream類,用于幫助開發者完成保存和讀取對象成員變量取值的過程,但要求讀寫或存儲的對象必須實現了Serializable接口,但Serializable接口中沒有定義任何方法,僅僅被用作一種標志,已被編譯器作特殊處理。
下面是對象的序列化范例:
import java.io.* ; public class Person implements Serializable { private String name ; private int age ; public Person(String name,int age) { this.name = name ; this.age = age ; } public String toString() { return " 姓名:"+this.name+",年齡:"+this.age ; } }; |
這個類實現了Serializable接口,所以此類的對象可序列化。下面的范例使用ObjectOutputStream與ObjectInputStream將Person類的對象保存在文件之中:
import java.io.*; public class SerializableDemo { public static void main( String args[] ) throws Exception { File f = new File("SerializedPerson") ; serialize(f); deserialize(f); } // 以下方法為序列化對象方法 public static void serialize(File f) throws Exception { OutputStream outputFile = new FileOutputStream(f); ObjectOutputStream cout = new ObjectOutputStream(outputFile); cout.writeObject(new Person("張三",25)); cout.close(); } // 以下方法為反序列化對象方法 public static void deserialize(File f) throws Exception { InputStream inputFile = new FileInputStream(f); ObjectInputStream cin = new ObjectInputStream(inputFile); Person p = (Person) cin.readObject(); System.out.println(p); } } |
在程序中聲明了一個deserialize()方法,此方法用于從文件中讀取已經保存的對象。
另外,如果不希望類中的某個屬性被序列化,可以在聲明屬性之前加上transient關鍵字。用這個關鍵字修飾的屬性沒有被保存下來,輸出時,將輸出默認值。