J2ME程式設計最佳實踐之靈活的RMS應用

2021-09-30 03:11:48 字數 1965 閱讀 4048

midp應用程式的標準持久化方案就是使用rms。rms類似於乙個小型資料庫,recordstore相當於資料庫的表,每個「表」由若干記錄(record)構成,一條記錄就是乙個用int表示的記錄號recordid和用byte表示的內容。記錄號可以看作是「主鍵」,byte陣列儲存內容。

rms提供的記錄操作可以實現根據id直接獲得記錄,或者列舉出乙個表中的所有記錄。

列舉記錄是非常低效的,因為只能比較byte資料來確定該記錄是否是所需的記錄。通過id獲得記錄是高效而方便的,類似於sql語句「select bytearraydata from recordstorename where recordid=?」。然而,通常應用程式很難知道某條記錄的id號,而rms記錄的「主鍵」又僅限於int型別,無法使用其他型別如string作為「主鍵」來查詢。因此,對於需要訪問不同型別物件的應用程式而言,就需要乙個靈活的rms操作框架。

我們的基本設想是,如果能使用string作為「主鍵」來查詢記錄,就能非常方便地獲得所需的內容。例如,應用程式設定可以通過"sys.settings"獲得byte陣列,並依次讀取出設定,使用者登入資訊可以通過"user.info"獲得byte陣列,再分解出使用者名稱和口令。

因此,我們實現乙個storagehandler類,提供唯一的rms訪問介面,使得其他類完全不必考慮底層的rms操作,只需提供能標識自身的乙個string即可。

如果我們能實現一種類似於資料庫索引的查詢表,就能根據string關鍵字查詢某條記錄。因此,我們使用乙個名為"index"的recordstore來儲存所有的索引,每一條索引都指向某一條具體記錄的id,設計乙個indexentry表示一條索引:

class indexentry根據索引查詢,分3步進行:

1.在名為"index"的recordstore中根據string查詢對應的indexentry。

2.取出indexentry,獲得記錄id號。

3.根據id號獲得另乙個recordstore的記錄,然後就可以讀取、更新和刪除該記錄。

如下圖所示:

由於indexentry儲存的資料很少,為了加快查詢速度,可以在應用程式啟動時,把所有的indexentry讀入乙個vector,在後面的操作中更新這個vector並與recordstore保持同步。

為了處理不同型別的資料,所有可通過storagehandler訪問的類都必須實現乙個storable介面:

public inte***ce storable前面已經提到,在midp應用程式中,序列化乙個類的最佳方法是使用datainputstream和dataoutputstream。因此,需要持久化的類可以通過getdata()和setdata()方法非常方便地訪問。假定應用程式的類userinfo儲存了使用者的登入名、口令和是否自動登入的資訊:

public class userinfo為了能將userinfo存入rms,需要實現storable介面:

class userinfo implements storable // 提供乙個唯一識別符號即可

public void getdata(dataoutputstream output) throws ioexception

public void setdata(datainputstream input) throws ioexception

// getters here...

}要儲存userinfo,只需呼叫storagehandler的儲存方法:

storagehandler.storeorupdate(userinfo);要讀取userinfo,呼叫storagehandler的讀取方法:

userinfo userinfo = new userinfo();

storagehandler.load(userinfo);這樣,需要讀取或儲存資料的類完全不必涉及底層的rms操作,大大簡化了應用程式的設計,增強了源**的可復用性與可維護性。

J2ME程式設計最佳實踐之螢幕導航

經典的mvc模式可用於螢幕導航,model用於儲存應用程式資料,而view則是各個displayable物件,controller需要單獨的乙個類實現。由於midlet類本身在生命週期內就只有乙個例項,因此midlet類就非常適合作為controller。sun在blueprints示例程式smar...

J2ME手機程式設計的啟示

最近空閒的時間學了一下遊戲程式設計,感覺還是很有意思。看了很多 後才發現很多東西的不變的 1.對作業系統的了解 不了解作業系統也可以程式設計序,但是,也許在效率上也許會有點的偏差。同時對執行緒的理解也是編好遊戲的關鍵。2.物件導向程式設計 理解設計模式,框架會對我們理解遊戲程式設計有很大的用處,如何...

J2ME 關於移動的主頁推送對J2ME程式的影響

中國移動於5月17日推出費用提示頁面,其實早在5月15日測試j2me程式的時候就發現已經有頁面推送了。5月15日早上照常測試我的j2me聯網程式發現在模擬器一切正常,但是到了真機上卻得不到正確的資料,後來發現是第一次鏈結得到的資料流正是移動推送的頁面資料。經過試驗,其實得到第乙個頁面不用管它,繼續重...