关于RMS,我们该知道的事(理论篇)

关于RMS,我们该知道的事(理论篇)


一 为什么要用RMS?
数据持久性存储在MIDP应用程序中不可缺少,当然在很多场合我们完全可以用文件存储的形式来实现持久性存储,但对于一些特殊的

case,RMS做得更好。
1.比如常见的小功能,登陆界面上有“记住用户名/密码”功能,这个最好是存储到RMS中。
2.我们用emulator在PC上调试程序,可以再控制台上看到打印的log信息,但是在真机上运行,我们是看不到这些信息的,那么调试

起来就会困难很多。这里可以用RMS来实现把真机运行的Log信息打印到这个小型DB中,后面可以通过一些程序实现查看RMS中的Log。

RMS重要性还体现在如下几个case上:
1.有个不能忽视的问题,由于J2ME安全机制的限制,每打开一次本地文件,都要提醒,当然签名的软件除外,对于普通开发者而言,

有时候是缺少这些硬件条件的。
2.有些J2ME手机不支持JSR75,也就是不能以文件的形式存储数据,那么RMS也就是不得不采用的持久性存储技术。


二、RMS中相关的几个基本概念
1.RMS(Record Management System),即记录管理系统,就是一个应用在移动终端上的小型DataBase.
2.数据持久性,是指数据不因应用程序关闭或者移动电话更换电池而丢失。在代码里生成的变量,就是只当MIDlet suite启动之后才

分配存储空间,而shut down之后,KVM就会开始回收这些变量占用的空间。

3.RMS就是开发者和持久性存储空间之间的桥梁,API封装在javax.microedition.rms包内,包括1个类,4个接口,5个异常。主要操

作都封装在RecordStore类中。

三、关于JAR包中MIDlet-Data-Size属性值的问题
一些书上都说必须要设定一个默认值。但我在实际开发过2款手机中,都没有对这个参数修改过,使用中没有发现异常。或许设定了

性能会好些?可以肯定的一点是,在一些高配手机上,RMS的空间是可以动态分配的。低配手机中应该要注意这个参数的设定。


四、RMS数据读写流程
在RMS中存储的数据以记录(Record)为单元,记录不能单独存在,必须数据某个RecordStore。
RMS没有限制数据形式,记录可以是字符、数字、数组或图片,只要数据可以被转换为字节数组就可以。
应用程序负责对数据进行编码,将其转换为字节数组并转换为原始数据;从RMS中读出的数据依然是字节数组,应用程序需要对数据

进行解码并转换为原始数据。
所以想要存储多种类型的对象,要涉及到数据的编解码工作(见第六部分的序列化/反序列化)。


五、RMS的实现是线程安全的

RecordStore确保所有单个的记录存储操作都是原子、同步和串行化的。这条非常重要,如果没有这个机制,就要developer自己去做

线程同步,添加一定的工作量。线程安全,可以保证存储数据的完整性。

六、RMS与数据序列化/反序列化

在编写MIDP应用程序时,需要存储的数据不外乎如下几种:Java基本类型、文本、图片、Java对象。文本可以转化为String对象,图

片可以转化为byte[]或者int[]存储。
对于复杂一点的对象(包含多种基本类型的成员变量),我们需要对其进行序列化/反序列化处理,也就是编解码。DataOutputStream

和DataInputStream分别对OutputStream和InputStream进行了装饰,提供了操作Java基本类型的方法。在操作Java基本类型数据时,

使用DataOutputStream和DataInputStream得write***()和read***()方法配套使用。
在存储图片时候,要以byte[]/int[]形式存储,并且需要把数组长度(即图片数据大小)存储到RMS中,如果需要,图片尺寸信息也要

存储。
只有序列化/饭序列化的方法还不够,我们终极目标是把数据存储在移动电话的非挥发性内存中,需要在内存中申请一块空间,就要

借助ByteArrayOutputStream和对应的ByteArrayInputStream来封装DataOutputStream/DataInputStream。

七、开发中的难点(会在实践篇中给出几个样例)
1.数据序列化/反序列化很重要,也算是应用上的一个难点。
2.数据的索引和遍历
3.效率和性能的优化。

总结
RMS的使用其实是不方便的,但我们又不得不用。由于手机资源受限,不允许再提供更多API来封装数据,所以又这么一个小巧的应用

在移动设备上的DB,还是值得庆幸的。在与RMS交互的过程中,开发者不得不对数据进行加工和处理。


参考文献
《Java ME 核心技术与最佳实践》

                 David Dong

猜你喜欢

转载自blog.csdn.net/fengyud/article/details/4538010