J2ME中的记录管理系统(RMS)之一

翻译 2006年05月22日 21:26:00

表(MIDP

第一部分:理解记录管理系统(RMS

MIDP的一个重要子系统是RMS,它是一个提供设备上本地数据持续性给MIDP应用程序的API。现今,在大部分支持MIDP的设备上,RMS是本地数据存储的唯一工具---极少有设备支持传统的文件系统。那么,正如你所设想的,对于编写任何依赖本地永久性数据的应用程序来说,对RMS的全面理解都是至关重要的。

这篇文章是探究RMS及围绕其在MIDP应用程序中使用的更多问题的系列文章中的第一篇,这些问题包括诸如同外部数据源(比如关系型数据库)交互等问题。作为开始,我们将研究RMS需要提供些什么以及编写一些简单的调试工具。

 

重要的概念

首先你需要理解RMS的一些重要概念。

 

记录

如同你从它的名字中所推断的一样,RMS是一个管理纪录的系统。一条记录是一个独立的数据项。RMS对于记录中包含什么没设限制:一条记录可以包含一个整型数,一个字符串,一个数组或是一副图片----任何一个字节序列可以代替的东西。如果你能创建你的数据的二进制编码以及相应的解码,那么你就可以将它存储在一条记录中,当然它要受制于系统施加的尺寸大小约束。

许多RMS的初学者都被术语“record”所迷惑。他们想知道系统是怎样将单个的记录细分为离散的数据序列,于是问道:“域在哪里?”。答案很简单:RMS中记录没有任何域。或者更准确地说,一条记录由一个可变长度的单一二进制域组成。解释记录内容的责任就完全落在了应用程序身上。RMS提供存储和一个唯一的标志符,再没其他东西了。尽管这种工作的分工使应用程序复杂化,但它令RMS小而灵活----对于一个MIDP子系统来说这是很重要的特性。

API层面上,记录只不过就是字节数组。

 

记录仓库

记录仓库是记录的有序集合。记录不是独立的实体:每一条记录都必须属于一个记录仓库,并且所有的记录访问都经由记录仓库。事实上,记录仓库保证了记录被读取与写入时的原子性,而不会有数据变坏的可能性。

记录被创建的时候,记录仓库分配给它一个唯一的标志符----一个叫做记录ID的整型数。第一个被加进记录仓库的记录的记录ID1,第二个为2,等等。记录ID不是索引。删除记录不会使现存记录被重新编号或者影响下一个记录ID的值。

MIDlet套件中使用名字来识别记录仓库。一个记录仓库的名字可以包含1~32Unicode字符,而且在创建记录仓库的MIDlet套件中它必须是唯一的。在MIDP1.0中,记录仓库不可以被不同的MIDlet套件所共享。MIDP2.0可以随意地允许一个MIDlet套件同其他MIDlet套件共享一个记录仓库,这种情况下记录仓库通过MIDlet套件的名字和它的提供者连同记录仓库的名字本身来标识。

记录仓库还维持一个time-stamp和版本信息,那样应用程序就能够发现记录仓库是什么时候被修改的。为了更进一步的跟踪,应用程序可以注册一个监听器,任何时候记录仓库被修改时就通知它。

API层面上,一个记录仓库被一个javax.microedition.rms.RecordStore类的实例所代表。所有的RMS类和接口都是在javax.microedition.rms包中定义的。

 

 

在看代码之前,让我们先回顾关于RMS的重要信息

 

存储限制

供基于记录存储用的可用存储空间的大小随不同的设备而不同。MIDP规范要求设备为永久数据存储预留至少8K大小的非易失性存储空间。规范对于单个记录的大小没有任何限制,但是空间的约束随不同的设备而不同.RMS为决定单个记录的大小、记录仓库的总大小和存储数据的存储器还剩多少提供了方法。记住:永久性存储器是共享的稀有资源,所以使用时要节俭。

任何使用RMSMIDlet套件都应该通过在JAR清单和应用程序描述符中设定MIDlet-Data-Size属性的方式详细说明它所需要的数据存储空间的最小字节数目。不要把这个值设置得比绝对需求大,因为设备可能会拒绝建立数据存储需求超过可用空间大小的MIDlet套件。如果这个属性丢了,设备会假定MIDlet套件不需要数据存储空间。实践中,大多数设备允许应用程序超出它们规定的空间要求,而不会依赖于这种规定。

注意:一些MIDP实现会要求你定义另外的与存储要求相关的属性----查看设备文件以了解详情。

 

速度

通常在永久性存储器上的操作会比在易失性存储器上的相当操作花更多的时间。特别地,在某些平台上,写数据会花很长的时间。为了获得更好的性能,高速缓存在易失性存储器中频繁地存取数据。为了使用户界面保持响应,不要执行来自MIDlet事件线程的RMS操作。

 

线程安全

RMS操作是线程安全的,但是线程一定还要同其他任何共享资源一样,将数据的读取与写入调整到同一个记录仓库中。这种调整的要求适用于运行在不同MIDlet中的线程,因为在同一个MIDlet套件中记录仓库是共享的。

 

异常

一般说来,RMS API中的方法除了会抛出如java.lang.IllegalArgumentException标准运行时异常之外,也会抛出一个或更多的被选中的异常。RMS异常都是javax.microedition.rms包的组成部分。

当操作因记录ID不合法而不能执行时,InvalidRecordIDException异常会被抛出。

当记录仓库中没有更多的可用空间时,RecordStoreFullException异常会被抛出。

当应用程序试图打开不存在的记录仓库时,RecordStoreNotFoundException异常会被抛出。

当应用程序试图访问已经被关闭的记录仓库时,RecordStoreNotOpenException异常会被抛出。

RecordStoreException是上面四个异常的超类,当发生上面四个所不能覆盖的一般错误是它被抛出。

注意,简短起见,在这些系列文章的一些代码样例中,异常的处理被简化或省略掉了。

(待续。。。)

原文出处:

http://developers.sun.com/techtopics/mobility/midp/articles/databaserms/index.html

RMS记录管理系统,J2ME

记录存储系统(RMS),中采用记录的方式管理数据,根数据库的概念有点相似,数据的读取和访问十分方便。保存在记录中的数据会永久存在一直到MIDlet被删除,因此 非常适合应用程序存储一些运用相关的数据,...
  • nishuangfeng
  • nishuangfeng
  • 2010年04月17日 20:43
  • 151

J2me中RMS用法

   RMS(Record Management System)是MIDP中一个非常重要的子系统,因为它是J2ME应用程序进行持久性存储的唯一途径。当然你的系统如果支持JSR75的话,那么你可以使用F...
  • yangdeli888
  • yangdeli888
  • 2010年10月15日 16:08
  • 3553

J2ME 之 RMS

持久数据和记录管理系统( Record Management System,简称 RMS)  我在前面的文章中曾经提到过, MIDP提供在移动设备上存储持久数据的支持,并且 MID简表还特意规定兼容的...
  • evening424
  • evening424
  • 2007年08月03日 14:25
  • 865

了解记录管理系统RMS

数据库和 MIDP,第一部分:了解记录管理系统记录管理系统(Record Management System,RMS)是移动信息设备描述(Mobile Information Device Profi...
  • sweetsoft
  • sweetsoft
  • 2007年05月13日 22:50
  • 1536

微软文档权限管理(RMS)方案分析

转自:http://youmiss.blog.163.com/blog/static/218865920061190306660/
  • shamy
  • shamy
  • 2014年10月13日 09:42
  • 2528

J2ME删除RMS中的记录

1、什么是持久性存储?     持久性存储简单的理解就是数据不因为程序的退出而丢失,一般我们在程序中声明的变量都是存储在stack或者heap上的,程序退出后这些数据会被清除以释放资源。而存储在RMS...
  • hhy62011980
  • hhy62011980
  • 2010年04月25日 11:37
  • 1289

微软免费的文档权限管理方案(RMS)

原文链接:http://www.cnblogs.com/runsir/archive/2007/07/18/822177.html 一.客户需求分析 一)需求分析 1.在公司的日...
  • flower4wine
  • flower4wine
  • 2012年07月19日 22:53
  • 1683

J2ME RMS

package com.j2medev.chapter4;import javax.microedition.lcdui.*;public class InputUI extends Form imp...
  • aflylove
  • aflylove
  • 2006年09月27日 18:40
  • 991

J2ME 记录管理系统

J2ME 记录管理系统 (RMS)提供了一种机制,通过这种机制,MIDlet 能够持久存储数据,并在以后检索数据。在面向记录的方法中,J2ME RMS 由...
  • simayilong
  • simayilong
  • 2010年08月20日 11:33
  • 503

J2ME:rms的对象序列化

 import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.DataInputSt...
  • smartken0824
  • smartken0824
  • 2008年12月28日 00:07
  • 407
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:J2ME中的记录管理系统(RMS)之一
举报原因:
原因补充:

(最多只允许输入30个字)