在JAVAME中,程序的数据保存的地方,无外乎两种,一种是把数据保存在RMS里面,这是所有的JAVAME的手机都支持的,还有一种就是把数据保存在手机的文件系统里面,这个不是所有手机都能支持的,只有支持JSR075的手机,才支持把数据保存在文件系统里面,并且如果你的程序没有经过签名的话,你每次保存或者读取,手机都会弹出恼人的提示,是否允许程序访问文件系统。所在我一般都是把数据存在RMS里面,因为读写RMS是安全的,并且也是不需要手机提示的。因为我们的RMS数据是存在一个特殊的地方。
Record Management System是J2ME的一个重要的子系统,目的是实现应用程序本地数据的持久性存储。目前支持文件系统的移动信息设备还有限,因此RMS是J2ME开发人员实现本地数据存储的首选途径。
关于j2me中RMS存储容量的问题,一般手机提供给RMS的容量只有30k左右的空间,当存储大量数据时很容易跑出 RecordStoreFullException异常,表示存储空间已满。
RMS(Record Management System)是首先在MIDP1.0中提出的,它所在的包是javax.microedition.rms。利用他可以在没有任何数字签名的情况下在手机中进行信息的读写工作。
要使用RMS,首先需要通过RecordStore类的静态方法,构造一个RecordStore类,来进行RMS操作。具体语法:
RecordStore rms = RecordStore.openRecordStore("myrmslog", true, RecordStore.AUTHMODE_ANY, true);
其中,"myrmslog":是我们的log文件的名字,这里需要注意,实际通过RMS存储的文件名是一系列扩展前缀与这个名字的组合作为log文件的名字,而不是简单的指定。
第二个boolean参数:标识了如果指定名字的文件不存在是否允许程序自己创建这个文件。
第三个整形参数:标识了这个log文件的访问权限,我们这里使用RecordStore.AUTHMODE_ANY表明这个log文件允许任何其他MIDlet程序访问。
第四个boolean参数:表明了任何其他MIDlet程序是否能够修改这个log文件。
这样就打开了一个RecordStore,接下来就是通过RecordStore进行RMS操作了,主要就是一条语句:
rms.addRecord(record, 0, record.length);
其中record是要写入RMS文件中的内容,这里应该是一个byte数组(可以使用String.getBytes()方法得到任意字符串的byte数组。)
这样一条记录便被保存到了RMS中,如果想要再填入其他内容,则重复执行上述语句即可。
最后,不要忘了,填入完所有内容后,要记得关闭RMS文件:
rms.closeRecordStore();
一个使用的例子大概像下面这样,在这个例子中我们通过循环写了100条内容到RMS中:
RecordStore rms = RecordStore.openRecordStore("myrmslog", true,RecordStore.AUTHMODE_ANY, true);
for(int i = 0; i < 100; i++){
String str = i + "test log";
byte[] record = str.getBytes();
rms.addRecord(record, 0, record.length);
}
rms.closeRecordStore();
写入之后,我们要再写另外的程序来读取我们的Log内容。同样的,第一步需要使用RecordStore类的静态方法,构造一个RecordStore类,但是这里的参数需要变化一下,下面我们说明:
recordStore = RecordStore.openRecordStore(RMS_NAME, VENDOR_NAME, MIDLETSUITE_NAME);
其中
RMS_NAME:就是我们上面写入RMS时指定的文件名字,只要和写入时指定的一样即可,那些额外附加上的前缀是由系统来处理的并不需要我们关心。
VENDOR_NAME:必须与我们写入RMS程序的Vender名字完全相同,这个名字可以在程序的Jad文件中找到,就是Midlet Vendor这一项。
MIDLETSUITE_NAME:必须与我们写入RMS程序的Midlet名字完全相同,这个名字同样可以在程序的Jad文件中找到,就是Midlet Name这一项。
这样我们就得到了一个RecordStore类。下面就可以使用这个类来读取我们之前写入的Log内容了:
RecordEnumeration re = recordStore.enumerateRecords(null, null, true);
while (re.hasNextElement()) {
int id=re.nextRecordId();
byte b[] = this.recordStore.getRecord(id);
System.out.println(new String(b));//这里可以修改成任意需要的处理。
}
读取完毕后同样要记得关闭RecordEnumeration 和 RecordStore:
re.destroy();
recordStore.closeRecordStore();
参考文献:http://hi.baidu.com/%C2%ED%B7%FE%CA%E9%C4%FE/blog/item/32ea45024e447a0b4afb516e.html
http://www.bcbbs.net/news/Content45765.aspx
分享到:
相关推荐
J2ME 之 RMS 相关知识,比较基础,全面剖析,希望对您有所帮助。
J2me中 读写rms 封装好的借口。直接使用read write接口操作,中间步骤全部封装好。初次使用会建立这个rms record。
有完整的设计方案,在S60及以上机子完美运行,初学者可以参考下
J2ME RMS的基础应用,希望对初学者有帮助。
博文链接:https://kuikui.iteye.com/blog/125112
用自己写的j2me rms引擎写的电话本 功能是: 1.添加 2.查询 3.列出所有的资料 1.修改 2.删除 3.排序
package j2me4; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet....
示例应用程序使用 Java 2 Platform, Micro Edition (J2ME) record management system (J2ME RMS) 存储订单信息,用一个 MIDlet 执行必要的创建及访问数据库应用程序的逻辑。介绍如何使用 J2ME RMS、打造 MIDlet、并...
J2MERMS封装 查询方式实现了SQL查询 具体的实例可以看看文档
J2me RMS存储 网络连接 详解 PDF文档 自制目录
J2ME中RMS存储工具使用解析,希望对大家有用!
一个用J2me 的RMS 封装的数据库引擎.
基于J2ME中RMS手机电话本实例 增删改查 记录
在J2ME中,RMS作为唯一的永久性存储工具,其重要性是不言而喻的。 来自移动开发网 一个很不错的心的,揭开一头雾水
是一个word文档,详细介绍了J2ME中如何进行数据的存储
一款基于j2me+rms的手机电话簿程序,实现用户信息的增,删,改,查,其中搜索功能采用模糊匹配技术。
j2me 手机开发 有RMS本地持久化技术 SERVLET到后台持久化技术
初学J2ME时做的一个关于电话薄例子,包含了增删改查四项功能