騎豬闖天下

          J2ME隨筆,記錄成長的腳步

          導航

          <2008年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          隨筆檔案

          文章檔案

          統計

          留言簿(3)

          閱讀排行榜

          評論排行榜

          [J2ME-原創] RMS 序列化反序列化的用法

                  RMS中經常用到格式轉換,即序列化反序列化,經常混淆,現在似乎搞明白了,但總還是感覺沒有徹底的理解底層的一些東西,雖然不是徹底的理解,還是現單獨開篇,把已經理解的給與整理,以備后用,同時歡迎高手指點下ByteArrayOutputStrema、DataOutputStream的真正區別,本質性的,最好能仔細的說明下,為什么需要轉換兩次。小結如下:

          1.    格式轉換的序列化反序列化
          package PhoneBook;

          import java.io.ByteArrayInputStream;
          import java.io.ByteArrayOutputStream;
          import java.io.DataInputStream;
          import java.io.DataOutputStream;
          import java.io.IOException;

          public class BookAccount {

              
          private String userName = "";
              
          private String mobilePhone = "";
              
          private String email = "";
              
          private String phone = "";
              
              
          public BookAccount (String userName, String mobilePhone, String phone, String email){
                  
          this.userName = userName;
                  
          this.mobilePhone = mobilePhone;        
                  
          this.phone = phone;
                  
          this.email = email;
              }

              
              
          public BookAccount() {
                  
          // 自動生成的構造函數,好像沒有用處
              }

              
              
          //獲得Email
              public String getEmail(){
                  
          return email;
              }

              
              
          //設置Email
              public void setEmail(String email){
                  
          this.email = email;
              }

              
              
          //獲得移動電話號碼
              public String getMobilePhone(){
                  
          return mobilePhone;
              }

              
              
          //設置移動電話號碼
              public void setMobilePhone(String mobilePhone){
                  
          this.mobilePhone = mobilePhone;
              }

              
              
          //獲得家庭電話號碼
              public String getPhone(){
                  
          return phone;
              }

              
              
          //設置家庭號碼
              public void setPhone(String phone){
                  
          this.phone = phone;
              }

              
              
          //獲得姓名
              public String getUserName(){
                  
          return userName;
              }

              
              
          //設置姓名
              public void setUserName(String userName){
                  
          this.userName = userName;
              }

              
              
          /**
               * 1.Data指的是Java的基本數據類型和String。基本數據類型包括byte、int、char、long、float、double、boolean和short。
               * 2.baos作為參數傳送給構造器,這樣就可以對基本數據類型以及String進行讀寫操作
               * 3.關于流的概念參考筆記第一篇。
               
          */

              
              
          //把記錄卡片中4個屬性字符串 轉換為 字節數組
              public byte[] serialize() throws IOException {   
                  
                  
          //創建字節數組輸出流
                  ByteArrayOutputStream baos = new ByteArrayOutputStream();
                  
          //創建數據輸出流,將數據(java基本數據類型和String) 寫入指定基礎輸出流, 
                  
          //即:DataOutputStream 但是RMS是以字節數組存儲的,所以要轉換成字節數組。
                  DataOutputStream dos = new DataOutputStream(baos);
                  
                  
          //根據所要儲存的數據格式分別存入緩沖區內
                  dos.writeUTF(userName);
                  dos.writeUTF(mobilePhone);        
                  dos.writeUTF(phone);
                  dos.writeUTF(email);
                  
                  baos.close();
                  dos.close();
                  
                  
          //復制內存中的數據,以字節數組的形式返回此輸出流的當前內容
                  return baos.toByteArray();      
              }

              
              
          //把字節數組 轉換為 記錄卡片上的四個屬性的字符串
              public static BookAccount deserialize(byte[] data) throws IOException {
                  
                  ByteArrayInputStream bais 
          = new ByteArrayInputStream(data);
                  DataInputStream dis 
          = new DataInputStream(bais);
                  
          //實例化一個對象
                  BookAccount account = new BookAccount();
                  
                  
          //按照存儲數據的順序,把字節數組轉換成數據,順序一定一致。
                  account.userName = dis.readUTF();        
                  account.mobilePhone 
          = dis.readUTF();
                  account.phone 
          = dis.readUTF();
                  account.email 
          = dis.readUTF();
                  
                  
          //釋放資源
                  bais.close();
                  dis.close();
                  
                  
          //返回一個account對象        
                  return account;      
              }

              
              
          /**
               * 2進制數據和字符串的匹配函數
               * matches方法的使用,下面單獨介紹。
               
          */

              
          public static boolean matches(byte[] data, String userName) throws IOException{
                  ByteArrayInputStream bais 
          = new ByteArrayInputStream(data);
                  DataInputStream dis 
          = new DataInputStream(bais);
                  
          try{
                      
          if ( (dis.readUTF() ).equals(userName) )
                      
          return true;            
                  }
          catch (IOException e){
                      e.printStackTrace();
                  }
                  
                  
          return false;        
              }


          }



          <End>

          posted on 2008-08-30 21:20 騎豬闖天下 閱讀(571) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 滕州市| 鲁山县| 都匀市| 乃东县| 内黄县| 泰兴市| 濮阳县| 富锦市| 渭源县| 甘德县| 广南县| 佛冈县| 漾濞| 海丰县| 维西| 武宁县| 富蕴县| 晴隆县| 千阳县| 鄂伦春自治旗| 九龙县| 缙云县| 如皋市| 泰宁县| 龙门县| 泸定县| 荆州市| 茌平县| 福州市| 无棣县| 安徽省| 昌平区| 白朗县| 凤山县| 珲春市| 平果县| 馆陶县| 江口县| 康保县| 广昌县| 永平县|