打造自己的RMS框架(一) RMS概念

     在J2ME的運用中,RMS是我們必須要掌握的知識。在運用RMS之前,我們有必要清楚的瞭解一下RMS的概念,這或許比較枯燥,但是對我們的運用和理解還是有幫助的。

     由於在MIDP程序中是以jar的形式打包存儲的,所以在jar中無法寫入數據,但是系統單獨開闢了存儲空間用來存儲數據和管理存儲空間的管理系統。

記錄存儲概念

      MIDP中的MIDlet爲了實現數據的持久化管理,提供了數據存儲的功能,可以在程序下次啓動時再啓用。這種持久性存儲機制稱爲記錄管理系統(RMS),它是一個簡單的面向記錄的數據庫模型。
      記錄存儲是面向記錄的數據庫,可把一個記錄存儲看作一個數據表文件,由許多記錄組合而成,這些記錄將持久保存並支持跨多個MIDlet的請求。在系統平臺的整個常規應用期間,包括重啓、更換電池等,MIDlet的記錄存儲都由系統平臺負責維護,系統會盡可能爲此記錄的完整性。一般不會出現記錄丟失的情況。

      記錄存儲的生成位置是由平臺決定的,並不會暴露給MIDlet。 在MIdlet組件範圍內可見的記錄存儲命名是簡單命名方式,就是說只依賴於打開或創建存儲時給予的名稱。一個MIDlet可以創建多個不同名字不同的記錄存儲。當一個MIDlet組件從系統刪除時,所有與此MIDlet組件有關的存儲記錄應該都被刪除,此刪除操作不通過用戶手工進行,而是系統自動刪除。在同一個MIDlet組件內的MIDlet之間可以相互直接存取。而且MIDlet2.0對於MIDlet1.0增加了允許不同MIDlet組件之間相互訪問的存儲記錄API,但是必須在創建存儲記錄時給予足夠的權限。共享能力通過其他MIDlet套件的記錄名和定義的存取權限來獲得。

      同一個MIDlet組件內記錄存儲的命名必須唯一。 不同MIDlet組件內的記錄存儲名可以相同,這是由於系統內記錄存儲的命名使用MIDlet組件名加記錄名的方式。組件名是通過應用描述中的MIDlet-Vendor和MIDlet-Name屬性來標識的。記錄存儲的名字是大小寫敏感的。

      記錄存儲系統並沒有提供鎖機制來進行記錄存儲的同步共享機制。 但是記錄存儲的實現確保所有單個記錄存儲操作是原子的,同步和序列化的,通過此種方式來保證同時訪問時不會發生錯誤。但是如果一個MIDlet使用多線程來存取記錄,需要由MIDlet來保證此次存取的同步,也就是說可能會產生一個未定義順序的存儲結果。比如說,如果兩個線程同時併發調用RecordStore.setRecord在一個記錄存儲上,記錄存儲會序列化這些調用,並不會發生數據庫的損壞錯誤。但是其中一個寫操作可能會被接下來的另一個操作重寫,這可能會在MIDlet內引起問題。如果平臺要以透明的方式執行存儲的同步,則需要平臺負責在MIDlet和同步引擎之間強制執行對存儲記錄的獨佔訪問,這就影響了存儲的效率。

      記錄存儲中使用了一個長整形來表示日期和時間,記錄它最後更改的時間。 記錄存儲還維護一個整數版本號,應用程序中沒更改一次記錄存儲的內容,版本號就會增加,這對同步引擎以及多個應用程序公用一個記錄存儲是十分有用的。

      記錄是以字節數組的方式存放的。 開發者可以用DataInputStream和DataOutputStream以及ByteArrayInputStream和ByteArrayOutputStream成對組合和拆解不同的數據類型到字節數組中。每條記錄通過一個整數記錄ID號唯一標識,並且用作記錄的主鍵。記錄存儲中生成的第一個記錄號爲1,以後每增加一個記錄號加1。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章