<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 56,  comments - 12,  trackbacks - 0

    Java中除了二進制文件和使用文本文件外還有基于Data的數據操作,這里的Data指的是Java的基本數據類型和String。基本數據類型包括byte、int、char、long、float、double、boolean和short。

    說到Java的基本數據類型必須談到的兩個類是DataInputStream和DataOutputStream。它們提供了對Java基本數據類型 的操作,但是這些方法事實上是在兩個重要的接口中定義的DataInput和DataOutput,它們的功能就是把二進制的字節流轉換成Java的基本 數據類型,同時還提供了從數據中使用UTF-8編碼構建String的功能。有一個重要的類RandomAccessFile實現了DataInput和DataOutput兩個接口使得他能夠對文件同時進行寫和讀的操作。

    在DataInputStream和DataOutputStream兩個類中的方法都很簡單,基本結構為readXXXX()和writeXXXX ()其中XXXX代表基本數據類型或者String。在這里不多講述,不過值得一提的是我們有必要讀讀java中unicode的編碼規則,在API doc中有比較詳細的介紹。通常我們的對象有很多都是由java的基本數據類型構成的,比如一個人的信息包括姓名,電子信箱,電話號碼和性別等。其實我們 可以用DataInputStream中的方法和DataOutputStream中的方法按照一定的序列把數據寫入流中再按照相同的序列把他們讀取出 來,這就是我們自己實現的序列化,這可以用在數據傳輸中,比如在J2ME聯網程序中使用序列化機制傳輸數據。下面我們看看如何自己實現序列化,首先我們要有兩個構造函數其中一個參數為空。

    public Account()
    {

    }

    public Account(String userName, String email, int age, boolean gender)
    {
     this.userName = userName;
     this.email = email;
     this.age = age;
     this.gender = gender;
    }

      當我們進行序列化的時候也很簡單,我們只是往DataOutputStream中按照順序寫入對象的成員變量。例如:

    public void serialize(DataOutputStream dos) throws IOException
    {
     dos.writeUTF(userName);
     dos.writeUTF(email);
     dos.writeInt(age);
     dos.writeBoolean(gender);
    }

      當我們進行反序列化的時候則按照相同的順序從DataInputStream里面讀取數據并賦值給成員變量。例如:

    public static Account deserialize(DataInputStream dis) throws IOException
    {
     Account account = new Account();
     account.userName = dis.readUTF();
     account.email = dis.readUTF();
     account.age = dis.readInt();
     account.gender = dis.readBoolean();
     return account;
    }

      為了便于調試我們還提供一個toString()的方法打印出對象的實際信息。這是個好的習慣。

    public String toString()
    {
    return "UserName = " + userName + " Email = " + email + " age = " + age + " gender = " + (gender ? "male" : "female");
    }

      為了測試序列化我們編寫下面的程序進行測試,代碼比較簡單。

    package com.j2medev.mingjava;
    import java.io.*;

    public class TestDataIO
    {
     public static void main(String[] args) throws IOException
     {
      Account account = new Account("mingjava","eric.zhan@263.net",25,true);
      System.out.println("before serialization.........");
      System.out.println(account.toString());
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      DataOutputStream dos = new DataOutputStream(baos);
      account.serialize(dos);
      DataInputStream dis = new DataInputStream(new ByteArrayInputStream(baos.toByteArray()));
      Account sAccount = Account.deserialize(dis);
      System.out.println("after serialization..........");
      System.out.println(sAccount.toString());
      dos.close();
      dis.close();
     }
    }

    package com.j2medev.mingjava;
    import java.io.*;

    public class Account
    {
     private String userName = "";
     private String email = "";
     private int age = 0;
     private boolean gender = false;

     public Account()
     {}

     public Account(String userName, String email, int age, boolean gender)
     {
      this.userName = userName;
      this.email = email;
      this.age = age;
      this.gender = gender;
     }

     public void serialize(DataOutputStream dos) throws IOException
     {
      dos.writeUTF(userName);
      dos.writeUTF(email);
      dos.writeInt(age);
      dos.writeBoolean(gender);
     }

     public static Account deserialize(DataInputStream dis) throws IOException
     {
      Account account = new Account();
      account.userName = dis.readUTF();
      account.email = dis.readUTF();
      account.age = dis.readInt();
      account.gender = dis.readBoolean();
      return account;
     }

     public String toString()
     {
      return "UserName = " + userName + " Email = " + email + " age = " + age + " gender = " + (gender ? "male" : "female");
     }
    }

      編譯運行程序在控制臺輸出:

    before serialization.........
    UserName = mingjava Email = eric.zhan@263.net age = 25 gender = male
    after serialization..........
    UserName = mingjava Email = eric.zhan@263.net age = 25 gender = male

      序列化成功,后面我將講述如何在J2ME聯網中使用序列化機制。
    posted on 2007-01-18 23:53 苦笑枯 閱讀(235) 評論(0)  編輯  收藏 所屬分類: Java
    收藏來自互聯網,僅供學習。若有侵權,請與我聯系!

    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(2)

    隨筆分類(56)

    隨筆檔案(56)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品午夜在线观看| 久久精品国产亚洲AV电影| 亚洲日本在线观看视频| 亚洲一区二区三区在线观看精品中文| 亚洲一区二区三区香蕉| 久久精品国产亚洲av影院| 国产99在线|亚洲| 黄床大片30分钟免费看| 任你躁在线精品免费| 亚洲免费观看在线视频| 免费的涩涩视频在线播放| 国产AV无码专区亚洲AWWW| 亚洲综合婷婷久久| 亚洲色精品三区二区一区| 日韩精品无码永久免费网站| 国产精品免费观看调教网| 国产99视频精品免费观看7| 免费国产成人午夜私人影视| 国产成人亚洲综合无码精品 | 久久久久亚洲精品日久生情| 亚洲综合精品第一页| 人成免费在线视频| 亚洲免费在线观看视频| 国产一区二区三区免费视频| 亚洲gv猛男gv无码男同短文| 中文字幕亚洲精品无码| 三年片在线观看免费西瓜视频| 在线看片免费不卡人成视频| 久久影视综合亚洲| 亚洲乱码一区二区三区国产精品| 一级毛片在播放免费| 国产在线a免费观看| 亚洲国产V高清在线观看| 亚洲午夜久久久精品电影院| 亚洲免费在线观看| 久久久久国色AV免费看图片 | 亚洲AⅤ无码一区二区三区在线| 久久久亚洲欧洲日产国码aⅴ | 亚洲人妖女同在线播放| fc2成年免费共享视频网站| 黄页网站免费观看|