天空是藍色的

          做好軟件為中國 #gcc -c helloworld.c -o helloworld.o //編譯目標文件 #gcc helloworld.o -o helloworld //編譯成可執行exe #helloworld //運行exe
          數據加載中……
          Java對象序列化機制

          對象序列化機制對于需要將對象的狀態保存到文件中,而后能夠通過讀入對象狀態來重新構造對象,恢復程序狀態,或者使用套接字在網絡上傳送對象的程序來說,是很有用的。通過讓類實現java.io.Serializable 接口可以將類序列化。這個接口是一個制造者(marker)接口。也就是說,對于要實現它的類來說,該接口不需要實現任何方法。它主要用來通知Java虛擬機(JVM)需要將一個對象序列化。

          也叫串行化,對象的域轉化為緊湊的2進制形式,是對象持久化的方法之一。

          《實現類的序列化--例子將Vector對象壓入標準流》出處 CN-JAVA原創:jackliu

          Vector對象是一個很靈活的java數據結構,在實際編程中,有時需要我們將一個Vector對象傳遞給另一個Java程序并保持Vector的數據結構狀態,這時,我們可以將需要傳遞的對象實現java.io.Serializable接口,序列化這個類,由于序列化本身就是允許一個對象在虛擬機之間傳送(或者經過一段空間,如在RMI中;或者經過一段時間,比如數據流被保存到一個文件中)。 關于類的序列化請查閱相關資料,本篇不在敘述,下面使用一個簡單的程序說明如何把一個Vector對象序列化并放到一個流中(為了測試方便,這里放到一個文件流中,如果換成一個套接字就可以把對象發送給遠程請求者)

          程序1:把一個Vector對象存儲到一個testvector.obj文件里(模擬server socket處理)

           1import java.io.*;
           2import java.util.*;
           3
           4class TestVector implements java.io.Serializable{
           5        private Vector vect=new Vector();
           6        
           7        public void add(Object obj){
           8                this.vect.add(obj);
           9        }

          10        public void print(){
          11                System.out.println(this.vect);
          12        }

          13        public static void main(String[] args){
          14                try {
          15                        /* 將對象寫到一個文件里 */
          16                        FileOutputStream objfile = new FileOutputStream("testvector.obj");
          17                        /* 創建一個輸出流 */
          18                        ObjectOutputStream p = new ObjectOutputStream(objfile);
          19                        /* 創建一個TestVector對象 */
          20                        TestVector tv =new TestVector();
          21                        /*給Vector寫入幾String個對象*/
          22                        tv.add("One");
          23                        tv.add("Two");
          24                        tv.add("Three");
          25                        p.writeObject(tv); // 把tv寫入流
          26                        p.flush();
          27                        objfile.close();    // 關閉文件對象
          28                }
           catch (Exception e) {
          29                        e.printStackTrace();
          30                }

          31        }

          32}

          33

          編譯程序1,運行后,在當前目錄生成一個testvector.obj文件,這個文件里存放了TestVector類的數據


          程序2:從testvector.obj文件里獲取TestVector對象(模擬socke客戶端)

           1import java.io.*;
           2import java.util.*;
           3
           4class ReadVectorObj{
           5        public static void  main (String[] args){
           6                try {
           7                        /* 打開文件,讀取Vector 存放的對象數據 */
           8                        FileInputStream objfile = new FileInputStream("testvector.obj");
           9                        ObjectInputStream q = new ObjectInputStream(objfile);
          10                        /* 獲取對象原始數據 */
          11                        TestVector myvector = (TestVector)q.readObject();
          12                        myvector.print(); 
          13                }
           catch (Exception e) {
          14                        e.printStackTrace();   
          15                }

          16        }

          17}


          編譯程序2,運行后,讀取testvector.obj文件,根據內容構建出原始的TestVector類。

          posted on 2005-11-09 09:52 bluesky 閱讀(798) 評論(0)  編輯  收藏 所屬分類: 基礎知識

          主站蜘蛛池模板: 博兴县| 南丹县| 正阳县| 密云县| 丰都县| 诸城市| 凤山市| 泰和县| 商洛市| 唐海县| 平遥县| 绍兴市| 丹东市| 二连浩特市| 壤塘县| 什邡市| 尉犁县| 舞钢市| 长沙县| 遂宁市| 丽水市| 德惠市| 华阴市| 临海市| 丘北县| 平江县| 吉木萨尔县| 桃园县| 武夷山市| 松江区| 彭州市| 万全县| 渑池县| 泾阳县| 贵德县| 连南| 贡山| 本溪| 镇安县| 古交市| 平谷区|