JAVA筆記——序列化
所謂的對(duì)象序列化(在很多地方也被成為串行化),是指將對(duì)象轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)流的一種實(shí)現(xiàn)手段。通過將對(duì)象序列化,可以方便地實(shí)現(xiàn)對(duì)象的傳輸及保存。
在Java中提供有ObjectInputStream與ObjectOutputStream這兩個(gè)類用于序列化對(duì)象的操作。這兩個(gè)類是用于存儲(chǔ)和獨(dú)缺對(duì)象的輸入輸出流類,只要把對(duì)象中的所有成員變量都存儲(chǔ)起來,就等于保存了這個(gè)對(duì)象,之后從保存的對(duì)象之中再將對(duì)象讀取進(jìn)來就可以繼續(xù)使用此對(duì)象。ObjectInputStream類與ObjectOutputStream類,用于幫助開發(fā)者完成保存和讀取對(duì)象成員變量取值的過程,但要求讀寫或存儲(chǔ)的對(duì)象必須實(shí)現(xiàn)了Serializable接口,但Serializable接口中沒有定義任何方法,僅僅被用作一種標(biāo)志,已被編譯器作特殊處理。
下面是對(duì)象的序列化范例:
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 ; } }; |
這個(gè)類實(shí)現(xiàn)了Serializable接口,所以此類的對(duì)象可序列化。下面的范例使用ObjectOutputStream與ObjectInputStream將Person類的對(duì)象保存在文件之中:
import java.io.*; public class SerializableDemo { public static void main( String args[] ) throws Exception { File f = new File("SerializedPerson") ; serialize(f); deserialize(f); } // 以下方法為序列化對(duì)象方法 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(); } // 以下方法為反序列化對(duì)象方法 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); } } |
在程序中聲明了一個(gè)deserialize()方法,此方法用于從文件中讀取已經(jīng)保存的對(duì)象。
另外,如果不希望類中的某個(gè)屬性被序列化,可以在聲明屬性之前加上transient關(guān)鍵字。用這個(gè)關(guān)鍵字修飾的屬性沒有被保存下來,輸出時(shí),將輸出默認(rèn)值。
posted on 2013-09-03 10:46 順其自然EVO 閱讀(271) 評(píng)論(0) 編輯 收藏