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

来源:互联网 发布:三维服装软件 编辑:程序博客网 时间:2024/04/30 20:11

     在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。

 

 

原创粉丝点击