国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

RecordManagementSystem從入門到精通系列之二

2019-11-18 15:48:23
字體:
供稿:網(wǎng)友

  在系列之一中,我們著重講述了Record Management System的基礎(chǔ)知識。在介紹如何使用Record Management System之前,我想首先介紹一下java IO以及在J2ME平臺實現(xiàn)序列化的內(nèi)容,無論對Record Management System還是MIDP中的通用聯(lián)網(wǎng)框架來說,上述內(nèi)容都是非常重要的。
  
  在CLDC中定義的Java IO是非常短小精悍的,但是也提供了足夠的類來完成我們的IO操作。由于和J2SE的實現(xiàn)是通用的,因此你可以使用J2ME和J2SE或者J2EE平臺進行通信。比如通過聯(lián)網(wǎng)和servlet進行通信。在Record Management System中我們主要使用的類是ByteArrayInputStream、ByteArrayOutputStream、DataInputStream和DataOutputStream。前面兩個是基于字節(jié)的,ByteArrayInputStream的作用是把字節(jié)數(shù)組轉(zhuǎn)換成流而ByteArrayOutputStream的作用是把內(nèi)存緩沖區(qū)內(nèi)的數(shù)據(jù)轉(zhuǎn)換成字節(jié)。后面兩個類是基于java基本數(shù)據(jù)類型和String操作的。通常他們把前面兩個類作為參數(shù)傳送給構(gòu)造器,這樣他們就可以對基本數(shù)據(jù)類型以及String進行讀寫操作了。值得注重的一點是ByteArrayOutputStream的toByteArray()方法是把內(nèi)存中的數(shù)據(jù)進行復制返回,這樣的話多浪費了一份內(nèi)存,為了更有效的使用有限的存儲空間你可以擴展ByteArrayOutputSteam類然后提供getByteArray()方法,下面是例子:
  public class MyByteArrayOutputStream extends ByteArrayOutputStream
  {
  ...........
  ...........
  
  public byte[] getByteArray()
  {
  return buf;
  }
  }
  
  在J2ME中并沒有提供對象序列化的機制,但是我們可以自己實現(xiàn)它。請考慮下面這個類:
  //Bank.java
  public class Bank
  {
  PRivate String bankName;
  private String phone;
  private int employeeNum;
  
  public Bank(){}
  
  public Bank(String aBankName,String aPhone,int aEmployeeNum)
  {
  this.bankName = aBankName;
  this.phone = aPhone;
  this.employeeNum = aEmployeeNum;
  }
  
  public String getBankName()
  {
  return bankName !=null?bankName:"";
  }
  
  public String getPhone()
  {
  return phone!=null?phone:"";
  }
  
  public int getEmployeeNum()
  {
  return employeeNum;
  }
  
  }
  我們添加兩個方法到這個類來實現(xiàn)對象序列化。如下所示:
  public class Bank
  {
  private String bankName;
  private String phone;
  private int employeeNum;
  
  public Bank(){}
  
  public Bank(String aBankName,String aPhone,int aEmployeeNum)
  {
  this.bankName = aBankName;
  this.phone = aPhone;
  this.employeeNum = aEmployeeNum;
  }
  
  public String getBankName()
  {
  return bankName !=null?bankName:"";
  }
  
  public String getPhone()
  {
  return phone!=null?phone:"";
  }
  
  public int getEmployeeNum()
  {
  return employeeNum;
  }
  
  public byte[] serialize() throws IOException
  {
  ByteArrayOutputStream bos = new ByteArrayOutputStream();
  DataOutputStream dos = new DataOutputStream(bos);
  
  dos.writeUTF(getBankName());
  dos.writeUTF(getPhone());
  dos.writeInt(getEmployeeNum());
  dos.flush();
  
  return bos.toByteArray();
  }
  
  public Bank deserialize(byte[] data) throws IOException
  {
  ByteArrayInputStream bis = new ByteArrayInputStream(data);
  DataInputStream dis = new DataInputStream(bis);
  
  Bank myBank = new Bank();
  myBank.bankName = dis.readUTF();
  myBank.phone = dis.readUTF();
  myBank.employeeNum = dis.readInt();
  
  return myBank;
  }
  }
  這樣我們就實現(xiàn)了對象的序列化,使用起來也非常簡單。序列化和反序列化的操作分別如下面所示:
  Bank aBank = .....;
  RecordStore rs = .....;
  try
  {
  byte[] data = aBank.serialize();
  rs.addRecord(data,0,data.length);
  }
  
  catch(IOException e)
  {
  //do something
  }
  
  catch(RecordStoreException e)
  {
  //do something
  }
  ――――――――――――――――――――――――――――
  
  byte[] data = ..........;
  Bank aBank = null;
  try
  {
  aBank = Bank.deserialize(data);
  }
  catch(IOException e)
  {
  
  }
  值得注重的一點是在Bank類中我們的成員都是基本數(shù)據(jù)類型以及String類型,并不存在指向其他對象的引用,這是最理想也是最簡單的情況,事實上我們在J2ME中設計序列化的類的時候也應該盡量這樣做,避免不必要得麻煩。進入討論組討論。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 若尔盖县| 郴州市| 三河市| 泸定县| 新巴尔虎左旗| 长阳| 新余市| 文山县| 虞城县| 上蔡县| 淮滨县| 遂平县| 木兰县| 青阳县| 桑植县| 泗阳县| 南皮县| 汉源县| 太康县| 庆阳市| 正阳县| 南投县| 鄂州市| 玛沁县| 浦东新区| 石河子市| 陆丰市| 安宁市| 长子县| 余江县| 南安市| 绍兴县| 鄱阳县| 平阳县| 读书| 韩城市| 郁南县| 台南市| 灵川县| 修文县| 蒲江县|