溫馨提示:您的每一次轉(zhuǎn)載,體現(xiàn)了我寫(xiě)此文的意義!!!煩請(qǐng)您在轉(zhuǎn)載時(shí)注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          雪山飛鵠

          溫馨提示:您的每一次轉(zhuǎn)載,體現(xiàn)了我寫(xiě)此文的意義!!!煩請(qǐng)您在轉(zhuǎn)載時(shí)注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks

           首先解釋兩個(gè)概念,何為序列化?何為反序列化?

          序列化:將對(duì)象轉(zhuǎn)化成流的過(guò)程稱為序列化

          反序列化:將流轉(zhuǎn)化成對(duì)象的過(guò)程稱之為反序列化

          序列化與反序列化必須遵守的原則

          a)         Java對(duì)象

          java中要想使一個(gè)java對(duì)象可以實(shí)現(xiàn)序列化與反序列化,必須讓該類實(shí)現(xiàn)java.io.Serializable接口

          java.io.Serializable接口定義如下:

          publicinterface Serializable {

          }

          從上述定義中可以看到該接口中未定義任何方法,這大大的簡(jiǎn)化了開(kāi)發(fā)者

          b)      序列化主要依賴java.io.ObjectOutputStream,該類對(duì)java.io.FileOutputStream進(jìn)一步做了封裝,這里主要使用ObjectOutputStream類的writeObject()方法實(shí)現(xiàn)序列化功能

          Demo:

          /**

               *將對(duì)象序列化到磁盤(pán)文件中

               *@paramo

               *@throwsException

               */

              publicstaticvoid writeObject(Object o) throws Exception{

                 File f=new File("d:""user.tmp");

                 if(f.exists()){

                     f.delete();

                 }

                 FileOutputStream os=new FileOutputStream(f);

                 //ObjectOutputStream 核心類

                 ObjectOutputStream oos=new ObjectOutputStream(os);

                 oos.writeObject(o);

                 oos.close();

                 os.close();

              }

          c)      反序列化主要依賴java.io.ObjectInputStream,該類對(duì)java.io.InputStream進(jìn)一步做了封裝,這里主要使用ObjectInputStream類的readObject()方法實(shí)現(xiàn)序列化功能

          Demo:

          /**

               *反序列化,將磁盤(pán)文件轉(zhuǎn)化為對(duì)象

               *@paramf

               *@return

               *@throwsException

               */

              publicstatic User readObject(File f) throws Exception{

                 InputStream is=new FileInputStream(f);

                 //ObjectOutputStream 核心類

                 ObjectInputStream ois=new ObjectInputStream(is);

                 return (User)ois.readObject();

              }

          貼出完整的demo

          Java對(duì)象:

          package com.io.bean;

          import java.io.Serializable;

          publicclass User implements Serializable {

             

              privateintuserId;

              private String userName;

              private String userSex;

              privateintuserAge;

              publicint getUserAge() {

                 returnuserAge;

              }

              publicvoid setUserAge(int userAge) {

                 this.userAge = userAge;

              }

              publicint getUserId() {

                 returnuserId;

              }

              publicvoid setUserId(int userId) {

                 this.userId = userId;

              }

              public String getUserName() {

                 returnuserName;

              }

              publicvoid setUserName(String userName) {

                 this.userName = userName;

              }

              public String getUserSex() {

                 returnuserSex;

              }

              publicvoid setUserSex(String userSex) {

                 this.userSex = userSex;

              }

              @Override

              public String toString() {

                 returnthis.getUserId() + "   " + this.getUserName() + "   "

                        + this.getUserSex() + "    " + this.getUserAge();

              }

          }

          序列化與反序列化

          package com.io.test;

          import java.io.File;

          import java.io.FileInputStream;

          import java.io.FileOutputStream;

          import java.io.InputStream;

          import java.io.ObjectInputStream;

          import java.io.ObjectOutputStream;

          import com.io.bean.User;

          publicclass TestSerializable {

              /**

               *將對(duì)象序列化到磁盤(pán)文件中

               *@paramo

               *@throwsException

               */

              publicstaticvoid writeObject(Object o) throws Exception{

                 File f=new File("d:""user.tmp");

                 if(f.exists()){

                     f.delete();

                 }

                 FileOutputStream os=new FileOutputStream(f);

                 //ObjectOutputStream 核心類

                 ObjectOutputStream oos=new ObjectOutputStream(os);

                 oos.writeObject(o);

                 oos.close();

                 os.close();

              }

             

              /**

               *反序列化,將磁盤(pán)文件轉(zhuǎn)化為對(duì)象

               *@paramf

               *@return

               *@throwsException

               */

              publicstatic User readObject(File f) throws Exception{

                 InputStream is=new FileInputStream(f);

                 //ObjectOutputStream 核心類

                 ObjectInputStream ois=new ObjectInputStream(is);

                 return (User)ois.readObject();

              }

             

             

              publicstaticvoid main(String[] args) throws Exception{

                

                 /*****************將對(duì)象序列化***************/

                

              /* 

                  User user=new User();

                 user.setUserId(1);

                 user.setUserName("張藝謀");

                 user.setUserSex("");

                 user.setUserAge(50);

                 TestSerializable.writeObject(user);

              */

                

                 /*****************將對(duì)象序反列化***************/

                

                 User user=TestSerializable.readObject(new File("d:""user.tmp"));

                 System.out.println(user);

              }

          }

          posted on 2009-11-09 10:43 雪山飛鵠 閱讀(38986) 評(píng)論(7)  編輯  收藏 所屬分類: javase

          Feedback

          # re: Java序列化與反序列化[未登錄](méi) 2012-11-16 13:26 a
          xfghfdd  回復(fù)  更多評(píng)論
            

          # re: Java序列化與反序列化[未登錄](méi) 2012-11-16 13:26 a
          @a
          @a
          @a
          @a
          @a
          @a
            回復(fù)  更多評(píng)論
            

          # re: Java序列化與反序列化 2013-07-24 16:56 cw
          你這個(gè)一次只能序列化一行啊。如果我想把文件中的所有內(nèi)容都反序列化呢? 如何反復(fù)調(diào)用?  回復(fù)  更多評(píng)論
            

          # re: Java序列化與反序列化 2013-07-31 10:01 小彭
          為啥不關(guān)閉輸入流呢?
          publicstatic User readObject(File f) throws Exception{

          InputStream is=new FileInputStream(f);

          //ObjectOutputStream 核心類

          ObjectInputStream ois=new ObjectInputStream(is);

          return (User)ois.readObject();

          }

            回復(fù)  更多評(píng)論
            

          # re: Java序列化與反序列化 2013-08-04 19:11 張瘋格
          關(guān)了怎么傳出User對(duì)象,先要把流的對(duì)象在這個(gè)方法里賦值給一個(gè)user 再關(guān)閉  回復(fù)  更多評(píng)論
            

          # re: Java序列化與反序列化 2014-02-10 15:56 revel
          @張瘋格
          定義一下不是就可以了  回復(fù)  更多評(píng)論
            

          # re: Java序列化與反序列化 2014-07-16 09:53 adad
          adadad  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 西乌| 简阳市| 花莲市| 嘉黎县| 浮山县| 会同县| 石渠县| 朝阳区| 桦南县| 开鲁县| 西吉县| 洞口县| 永安市| 柳州市| 乌兰浩特市| 河曲县| 淳化县| 闽侯县| 手机| 分宜县| 日土县| 井冈山市| 绥德县| 娄烦县| 内黄县| 女性| 嘉兴市| 淅川县| 江门市| 新丰县| 余庆县| 图木舒克市| 南江县| 双桥区| 红原县| 沂南县| 青冈县| 白水县| 大冶市| 鄂尔多斯市| 西乌|