选择显示字体大小

rms概念解析与使用指南



rms是首先在midp1.0中提出的,它所在的包是javax.microedition.rms,在这个包里面总共包括四个接口、一个类和五个异常。由此可见rms设计的非常小巧,这正是为了满足移动信息设备资源受限的需求。下面我们先弄清楚几个概念。

  1. 什么是持久性存储?
    持久性存储简单的理解就是数据不因为程序的退出而丢失,一般我们在程序中声明的变量都是存储在stack或者heap上的,程序退出后这些数据会被清除以释放资源。而存储在rms中的数据是不会被清除的。
  2. rms的数据存储在哪里?
    midp规范中没有规定rms的数据必须存储在哪里,而是由厂商来具体实现。一般存储在非挥发性的内存空间。因此这是对程序员透明的。
  3. rms的容量最小为多少?
    midp中规定厂商实现rms的时候,提供的存储空间不能小于8kb,例如笔者的nokia 6108的rms空间为30kb。
  4. rms中按照record来存储的,id是不是等于索引
    id和索引的区别还是很大的,id从1开始计数,这和数组的0开始计数有一些不同。id可以是不连续的,当一个id标记的record被删除后那么对应的id也就变得无效了。id是不能重复使用的。
  5. rms对存储在其中的数据格式有具体要求吗?
    答案是没有,只要数据可以被转换成byte[]那么这个数据就可以存储在rms中,取出的时候仍然是byte[]。因此这就要求我们开发人员来描绘数据的样子,因为rms只是负责把数据按照byte[]写入和读出。
  6. 在一个midlet套件中,recordstore可以被共享吗?
    可以
  7. 一个midlet套件中的recordstore可以被另外一个recordstore访问吗?
    在midp1.0中不可以,在midp2.0中推出了共享机制,通过共享可以实现。

上面以7个问题的形势总结了rms中需要注意的基本概念,下面我们看看如何使用rms。一般初学者学习rms的时候通常会被他们的方法给弄的不知如何下手,因为很多方法看上去很类似。这里我进行如下的总结,提供一些使用指南给大家。

首先读者应该清楚recordstore就相当于一个数据库,你必须新建一个这样的数据库才可以开始使用rms进行存储读取数据。新建recordstore非常简单,可以使用下面的静态方法。

static recordstore openrecordstore(string recordstorename, boolean createifnecessary)
注意recordstorename应该是长度不超过32位的unicode字符,大小写敏感且在midlet套件里面是唯一的,后面的boolean类型的createifnecessary表示,如果标记为true的时候,那么recordstore不存在就创建它。关闭recordstore使用closerecordstore()。在rms中另外一个重要的概念就是record,这就像数据库中一行一行的数据一样。下面我们首先对recordstore中的方法进行区分,有些是用来获得recordstore信息的有些则是用来获得record信息的。

  1. 获得recordstore信息
    int getversion()
    int getsize()
    string getname()
    long getlastmodified()
  2. 获得record信息
    int getnumrecords()
    int getnextrecordid()
    int getrecordsize(int recordid)

下面讲述如何对record进行操作,主要包括添加、修改、读取和删除。

  1. 读取记录
    byte[] getrecord(int recordid)
    int getrecord(int recordid, byte[] buffer, int offset)
  2. 添加记录
    int addrecord(byte[] data, int offset, int numbytes)
  3. 更新记录
    setrecord(int recordid, byte[] newdata, int offset, int numbytes)
  4. 删除记录
    deleterecord(int recordid)

前面我们提到了id和index是不同的,因为id可能不连续,那么我们如何来遍历数据呢?很多人可能会想到使用for循环,但是由于id可能不连续,那么这个结果是无法预测的。程序很可能会失败。正是由于这样的原因,在rms中提供了一个重要的接口recordenumeration。它可以遍历recordstore中的数据。我们看看下面的方法。

recordenumeration enumeraterecords(recordfilter filter, recordcomparator comparator, boolean keepupdated)

在这个方法中还包括了rms中的另外两个接口recordfilter和recordcomparator,他们是用来量身定制遍历的结果集的,你可以实现recordfilter来决定要把什么样的数据筛选出来,通过实现recordcomparator来决定数据的排序。最后的参数keepupdated,如果设置为true的话,那么它会跟踪recordstore中的数据变化,并且会反映到我们列出的结果集中,要知道这是非常好费资源的操作,建议设置为false。recordenumeration相当于一个双向的数据链表。你可以通过调用nextrecordid()和previousrecordid()来不停的移动。关于recordenumeration的其他方法读者可以参考java doc进行学习。

最后一点需要说明的就是共享机制,这是在midp2.0中提供的新特性。允许一个套件中的recordstore被另外一个访问,当然这是要在授权的模式下。首先我们看看原理图

如果midlet suite1在创建recordstore1的时候,授权模式authmode_any的话,那么其他的套件就有可能访问到recordstore1,比如上图中的midlet suite2。通常这样的访问通过两个步骤来完成。

  1. 创建可以被共享的recordstore
    我们可以通过下面的方法来实现,必须要把authmode设置为authmode_any
    static recordstore openrecordstore(string recordstorename, boolean createifnecessary, int authmode, boolean writable)
  2. 访问recordstore
    如果另外一个midlet suite中的midlet想访问的话,那么它需要知道要访问的midlet suite的vendorname和suitename,一般我们可以从jad文件中得到这两个数据。我么使用如下的方法,
    static recordstore openrecordstore(string recordstorename, string vendorname, string suitename)

本文的主要目的是介绍rms的基本概念以及为读者提供如何使用rms中的方法提供一些指导。想进一步研究rms,读者可以参考源码下载专区笔者提供的一个基于midp1.0实现的手机通信录。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons