qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          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)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2013年9月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 确山县| 信阳市| 古蔺县| 光山县| 新绛县| 宜都市| 永宁县| 普洱| 浦县| 丰原市| 沾益县| 肥东县| 枣强县| 资兴市| 汶川县| 麻阳| 班玛县| 延庆县| 积石山| 越西县| 蚌埠市| 宁国市| 庆安县| 南木林县| 治多县| 获嘉县| 泗洪县| 丘北县| 枝江市| 尼勒克县| 理塘县| 嘉祥县| 韩城市| 达拉特旗| 从江县| 澜沧| 汽车| 海宁市| 民县| 攀枝花市| 张掖市|