首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 核心功能實戰 (二):RMS 記錄管理系統與網路程式設計完整範例

     編輯:J2ME

承接上篇高階 UI 基礎,本文實作通訊錄應用,示範 RMS 本地儲存與 GCF 網路存取兩大核心功能,並對比 StreamConnection 與 ContentConnection 差異。

一、RMS (Record Management System) 基礎

  • MIDP 強制裝置提供 ≥8KB 非揮發性儲存
  • 記錄存儲 (RecordStore) 以位元組陣列為單位,欄位解析由開發者自行實作
  • 同一 MIDlet Suite 內共享,套件移除時自動刪除

核心 API

介面/類別用途
RecordStore開啟/建立/刪除/寫入/讀取記錄存儲
RecordEnumeration雙向游標遍歷記錄 (最常用)
RecordComparator自訂排序比較
RecordFilter自訂過濾條件
RecordListener記錄變更事件通知

二、通訊錄範例:AddressDB 封裝 RMS 操作


public class AddressDB {
    private static RecordStore rs;

    public AddressDB() {
        try { rs = RecordStore.openRecordStore("addressbook", true); }
        catch (RecordStoreException e) { e.printStackTrace(); }
    }

    // 新增:姓名+地址以 UTF 編碼存入
    public void addAddress(String name, String addr) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(bos);
        try {
            dos.writeUTF(name + "," + addr);
            byte[] data = bos.toByteArray();
            rs.addRecord(data, 0, data.length);
        } catch (Exception e) { e.printStackTrace(); }
    }

    // 取得第 index 筆姓名 (1-based)
    public static String getName(int index) {
        try {
            RecordEnumeration re = rs.enumerateRecords(null, null, false);
            int cnt = 1;
            while (cnt <= index && re.hasNextElement()) {
                String rec = new String(re.nextRecord());
                int comma = rec.indexOf(',');
                if (cnt == index) return rec.substring(2, comma); // 跳過 UTF 長度前綴
                cnt++;
            }
        } catch (Exception e) { e.printStackTrace(); }
        return null;
    }
    // getAddress(index) 同理
    // recordCount() 回傳 rs.getNumRecords()
}

三、AddressBookMIDlet 整合高階 UI

  • List (IMPLICIT 模式) 顯示姓名清單
  • 選取項目 → TextBox 顯示完整姓名/地址
  • Command.BACK 自動對應返回鍵,Command.STOP 對應結束

四、網路存取升級:從本地 RMS 到遠端伺服器

Generic Connection Framework (GCF) 架構


Connector.open("https://host/file") → 回傳實作 Connection 介面的物件

StreamConnection:基本串流,無長度資訊


StreamConnection conn = (StreamConnection) Connector.open(url);
InputStream in = conn.openInputStream();
byte[] buf = new byte[255];  // 必須猜測大小 ⚠️
int len = in.read(buf);
String data = new String(buf, 0, len).trim();
// 後續用 StringTokenizer 解析 (J2ME 無內建,需自行實作或移植)

ContentConnection:繼承 StreamConnection,提供長度查詢


ContentConnection conn = (ContentConnection) Connector.open(url);
int len = (int) conn.getLength();  // 精確取得內容長度 ✅
byte[] buf = new byte[len];
InputStream in = conn.openInputStream();
in.read(buf);  // 一次讀完
// 解析邏輯相同

五、HTTP 專用介面:HttpConnection (MIDP 專屬)

  • 支援 GET/POST/HEAD、請求標頭設定、回應碼/標頭讀取
  • 適用於 REST API、表單提交、Cookie 管理等進階 HTTP 操作

六、XML 解析整合:kXML / NanoXML

配合 HttpConnection 可實作 SOAP、XML-RPC、RSS/Atom 解析,構建豐富網路應用。

七、小結

功能本地 RMS網路 GCF
儲存單位位元組陣列/記錄串流/內容連線
查詢RecordEnumeration + 自訂 Filter/ComparatorHTTP GET/POST + XML/JSON 解析
同步需自行實作同步邏輯原生支援 Client-Server 架構
適用場景離線快取、設定、小量資料即時資料、大量資料、多使用者
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved