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

首頁 > 學院 > 開發設計 > 正文

Java嵌入式開發(2)

2019-11-18 10:48:23
字體:
來源:轉載
供稿:網友

  談談J2ME的幾個重要的功能
  持久數據和記錄治理系統( Record Management System,簡稱 RMS)
  我在前面的文章中曾經提到過, MIDP提供在移動設備上存儲持久數據的支持,并且 MID簡表還特意規定兼容的移動設備必須提供至少 8KB的非動態內存用于數據存儲的用途,時式上,大多數的 MIDP java設備提供的空間比這要求多得多。這就答應一個midlet充份利用應用程序的持久數據。對于有 Java 2標準版開發經驗的開發者,應該注重這種數據存儲能力與標準的 Java有區別。J2ME記錄治理系統 ( RMS )答應數據流被儲存并且在一個記錄基礎上訪問數據。由應用程序開發者把每個記錄解析到字段水平。RMS程序包內部的接口支持一個應用程序定義的基礎上的比較與檢索功能。
  一、javax.microedition.rms程序包
  通過 javax.microedition.rms包訪問 J2ME記錄治理系統,這個包包括一個類, RecordStore,和好幾個有用的接口 (在下列表格中描述 ):
  接口 描述
  RecordComparator 一個接口,定義一個比較機制,比較兩個記錄(以一個實現定義的方式)看它們是否匹配或它們的相對排序次序是什么樣的。
  RecordEnumeration 一個接口,一個雙向的紀錄模擬器
  RecordFilter 一個接口,定義了一個過濾器用于檢查一個記錄,看其是否匹配 (基于一種應用程序定義的標準 )。
  RecordListener 一個監聽者接口,從一個記錄存儲器中接受記錄更改/添加/刪除事件。
  這些接口對于實現自定義搜索和檢索功能很有用,這些接口中使用的最多的就是 RecordEnumeration。這個接口從 RecordStore.enumerateRecords()方法調用中返回并且被用于遍歷一組從記錄存儲器中返回的記錄。它包含 nextRecord()、 PReviousRecord()、 numRecords()和 hasNextElement()等方法。
  二、使用RecordStore類訪問記錄存儲
  RecordStore類是開發者開發基層 RMS的接口,記錄儲存是在一個平臺--midlet環境依靠的方式--上創建的。信息的實際的位置和存儲細節應用程序開發者其實并不知道,記錄存儲可以使用一種簡單的命名規則來訪問:名稱最多可以到32個Unicode字符長度,區分大小寫和必須在一個 midlet套件內唯一。在一個 midlet套件內的所有 midlet都有讀/寫一個記錄存儲的權限,只要它們知道正確的名稱。一旦這個 midlet套件被從該設備上刪除,所有與這個套件關聯的記錄存儲也將被刪除。
  比如說,為了打開一個名為 TestRecordSet的記錄存儲,你可以調用 RecordStore.openRecordStore()方法。這個方法使用兩個參數:一個字符串,表示記錄存儲的名稱;一個布爾值,假如為真的話,就會在紀錄存儲不存在時創建一個。我們使下列方法調用創建新的 TestRecordSet記錄存儲:
  RecordStore rs = null;
  rs = RecordStore.openRecordStore("TestRecordSet", true);
  記錄存儲被創建好后,我們可以通過調用 RecordStore.addRecord()方法來向這個記錄存儲添加數據。addRecord()接受三個參數:
  參數 描述
  byte[] data 一個儲存在記錄中的字節數據數組,通過 java.io.ByteArrayOutputStream和 java.io.DataOutputStream類把數據添加到這個字節數組。
  int offset 進入這個記錄第一個關聯字節數據緩沖區的索引。
  int numBytes 用于記錄的數據緩沖區的字節數
  一旦成功完成 addRecord()調用 ,這個方法就返回一個整數指定這個記錄在記錄存儲中的標識號。 RecordStore還規定另外一個數據編輯方法,包括 setRecord()和 deleteRecord(),但是我在例子中不會使用它們。
  三、構建一個用于J2ME設備的通訊錄
  這個例子構造一個基本的通訊錄應用程序,使用它用戶就可以從一個移動設備上查看聯絡資料。現在我只介紹從本地設備中存儲的數據中讀出相關的聯絡資料,在本文稍后的部分,你將看到如何使用J2ME網絡功能從一個 Web服務器取回數據文件!用戶將能查看一個地址列表和從這個列表選擇一個地址。為了實現這個目標,我們要創建兩個類,從用戶界面邏輯中把數據存取邏輯分開的: AddressDB類封裝所有的 RMS代碼; AddressBookMIDLet類封裝 GUI代碼。AddressDB類的代碼如下:
  import javax.microedition.rms.*;import java.io.ByteArrayInputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.DataInputStream;
  import java.io.DataOutputStream;
  import java.io.EOFException;
  import java.io.IOException;
  public class AddressDB {
  private static RecordStore rs = null;
  public AddressDB() {
  try {
  rs = RecordStore.openRecordStore("addressbook", true);
  }
  catch (RecordStoreException e) {
  System.out.println(e);
  e.printStackTrace();
  }
  }
  public void addAddress(String Name, String Address) {
  ByteArrayOutputStream os = new ByteArrayOutputStream();
  DataOutputStream output = new DataOutputStream(os);
  try {
  output.writeUTF(Name + "," + Address);
  }
  catch (IOException e) {
  System.out.println(e);
  e.printStackTrace();
  }
  byte[] b = os.toByteArray();
  try {
  rs.addRecord(b, 0, b.length);
  }
  catch (RecordStoreException e) {
  System.out.println(e);
  e.printStackTrace();
  }
  }
  public static String getName(int index) {
  int counter = 1;
  int commalocation = 0;
  String name = null;
  try {
  RecordEnumeration enumRec =
  rs.enumerateRecords(null, null, false);
  while ((counter <= index) && (enumRec.hasNextElement())) {
  String strTemp = new String(enumRec.nextRecord());
  commalocation = strTemp.indexOf(',');
  name = strTemp.substring(2, commalocation);
  counter++;
  }
  }
  catch (Exception e) {
  System.out.println(e);
  e.printStackTrace();
  }
  return name;
  }
  public static String getAddress(int index) {
  int counter = 1;
  int commalocation = 0;
  String address = null;
  try {
  RecordEnumeration enumRec =
  rs.enumerateRecords(null, null, false);
  while ((counter <= index) && (enumRec.hasNextElement())) {
  String strTemp = new String(enumRec.nextRecord());
  commalocation = strTemp.indexOf(',');
  address = strTemp.substring(commalocation + 1);
  counter++;
  }
  }
  catch (Exception e) {
  System.out.println(e);
  e.printStackTrace();
  }
  return address;
  }
  public static int recordCount() {
  int count = 0;
  try {
  count = rs.getNumRecords();
  }
  catch (Exception e) {
  System.out.println(e);
  e.printStackTrace();
  }
  return count;
  }
  }
  
  
    AddressDB類包含好幾個 public訪問方法,它們都對來自外部調用者的訪問隱藏記錄存儲的細節。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扎赉特旗| 贵州省| 太仆寺旗| 治多县| 永新县| 正蓝旗| 乌鲁木齐县| 山西省| 巴青县| 台中市| 五指山市| 高雄市| 岳普湖县| 扶沟县| 印江| 巴马| 剑河县| 芦山县| 鹤壁市| 哈巴河县| 丹阳市| 德安县| 启东市| 宁阳县| 赤城县| 偃师市| 巴彦淖尔市| 华亭县| 高陵县| 衡南县| 梅河口市| 绩溪县| 嘉峪关市| 南木林县| 西宁市| 邯郸市| 蚌埠市| 阜新市| 高雄市| 彩票| 银川市|