<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)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一级特黄大片在线观看| 日韩中文无码有码免费视频| 亚洲国产精品久久久天堂| 一日本道a高清免费播放| 亚洲?v女人的天堂在线观看| 午夜亚洲乱码伦小说区69堂| 国产片免费福利片永久| 污视频网站免费观看| 国产成人毛片亚洲精品| 中文字幕成人免费高清在线视频| 亚洲乱码精品久久久久..| a级毛片高清免费视频就| 亚洲AV乱码久久精品蜜桃| 2019中文字幕在线电影免费 | 久久受www免费人成_看片中文| 亚洲最新黄色网址| 两个人的视频高清在线观看免费| 亚洲国产AV一区二区三区四区| 亚洲高清视频一视频二视频三| 野花香高清视频在线观看免费 | 亚欧免费一级毛片| 亚洲欧洲精品久久| 好男人视频社区精品免费| 美女18一级毛片免费看| 国产亚洲一区二区在线观看| 亚洲成人免费在线| 亚洲欧美日韩久久精品| 亚洲中久无码不卡永久在线观看| 久久99毛片免费观看不卡| 亚洲人成图片网站| 亚洲精品岛国片在线观看| 久9这里精品免费视频| 亚洲人成网站色在线观看| 亚洲精品国产日韩无码AV永久免费网 | 亚洲国产乱码最新视频| 亚洲精品老司机在线观看| 日本在线看片免费| 亚洲国产精品精华液| 精品久久久久久亚洲| 最新猫咪www免费人成| 97国免费在线视频|