J2SE中的序列化詳解

          Java中處處體現(xiàn)著簡單的程序設計風格,序列化作為最常用的功能之一,在java中的設計尤為“簡單”。在ObjectInputStream 和ObjectOutputStream的幫助下,我們可以輕松的實現(xiàn)序列化。

          只要我們的class 實現(xiàn)了java.io.Serializable接口,就可以利用ObjectOutputStream的writeObject()方法將一個對象序列化;利用ObjectInputStream的readObject()方法,可以返回讀出的object對象。Serializable接口不需要我們實現(xiàn)任何方法。

          以下是一個例子,它能給我們一個感性的初步認識:

          Serial實現(xiàn)了就java.io.Serializable接口,是需要序列化的類。我們首先構造一個Serial的對象serial1然后將其保存(序列化)在一個文件中,而后再將其讀出(反序列化),并打印其內容。
          package Stream;

          /**

          * @author favo yang

          */

          import java.io.*;

          public class Serial implements Serializable {

           int company_id;

           String company_addr;

           boolean company_flag;

           public Serial(){}//不同于C++,沒有也可以

           public Serial(int company_id,String company_addr,boolean company_flag) {

          this.company_id=company_id;

          this.company_addr=company_addr;

          this.company_flag=company_flag;

           }

           public static void main(String[] args) {

          Serial serial1 = new Serial(752,"dayer street #5 building 02-287",false);//構造一個新的對象

          FileInputStream in=null;

          FileOutputStream out=null;

          ObjectInputStream oin=null;

          ObjectOutputStream oout=null;

          try {

           out = new FileOutputStream("5.txt");

           oout = new ObjectOutputStream(out);

           serial1.serialize(oout);//序列化

           oout.close();

           oout=null;

           in = new FileInputStream("5.txt");

           oin = new ObjectInputStream(in);

           Serial serial2 = Serial.deserialize(oin);//反序列化

           System.out.println(serial2);//打印結果

          } catch (Exception ex){

           ex.printStackTrace();

          } finally{

           try {

          if (in != null) {

           in.close();

          }

          if (oin != null) {

           oin.close();

          }

          if (out != null) {

           out.close();

          }

          if (oout != null) {

           oout.close();

          }

           } catch (IOException ex1) {

          ex1.printStackTrace();

           }

          }

           }

           /**

           * deserialize

           */

           public static Serial deserialize(ObjectInputStream oin) throws Exception{

          Serial s=(Serial)oin.readObject();

          return s;

           }

           public String toString() {

          return "DATA: "+company_id+" "+company_addr+" "+company_flag;

           }

           /**

          * serialize

           */

           public void serialize(ObjectOutputStream oout) throws Exception{

          oout.writeObject(this);

           }

          }

          運行結果:DATA: 752 dayer street #5 building 02-287 false

          正確打印了結果。

          posted on 2006-11-22 20:00 Timothy 閱讀(168) 評論(0)  編輯  收藏 所屬分類: JAVA大本營

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統(tǒng)計

          公告

          語義Web : 網絡就是計算機,軟件就是服務!

          常用鏈接

          留言簿(4)

          隨筆檔案(20)

          文章分類(25)

          文章檔案(25)

          新聞分類(4)

          新聞檔案(4)

          相冊

          收藏夾(27)

          個人主頁

          網絡博客

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 山东省| 乳源| 韶山市| 高唐县| 定远县| 嘉黎县| 安化县| 五大连池市| 新晃| 斗六市| 运城市| 临澧县| 崇州市| 通州区| 都兰县| 建德市| 马鞍山市| 磐安县| 宿州市| 霍邱县| 涿鹿县| 乌兰县| 新密市| 宝清县| 敦煌市| 灵川县| 镶黄旗| 尼勒克县| 宕昌县| 黄石市| 延边| 苍南县| 安顺市| 嵩明县| 西华县| 盐源县| 诸暨市| 临沧市| 吴旗县| 晋城| 珲春市|