`

详解RMS系统

 
阅读更多

 Author: 一滴蔚蓝色

RMS(Record Management System)是MIDP中一个非常重要的子系统,因为它是J2ME应用程序进行持久性存储的唯一途径。当然你的系统如果支持JSR75的话,那么你可以使用FileConnection来对文件进行操作。在这个包里面总共包括四个接口、一个类和五个异常。由此可见RMS设计的非常小巧,这正是为了满足移动信息设备资源受限的需求。

五个问题

1,什么是持久性存储

持久性存储简单的理解就是数据不因为程序的退出而丢失,一般我们在程序中声明的变量都是存储在stack或者heap上的,程序退出后这些数据会被清除以释放资源。而存储在RMS中的数据是不会被清除的。

2,RMS中按照Record来存储的,ID是不是等于索引

         ID和索引的区别还是很大的,ID从1开始计数,这和数组的0开始计数有一些不同。ID可以是不连续的,当一个ID标记的Record被删除后那么对应的ID也就变得无效了。ID是不能重复使用的。

3,RMS对存储数据格式没有具体的要求

只要数据可以被转换成byte[]那么这个数据就可以存储在RMS中,取出的时候仍然是byte[]。因此这就要求我们开发人员来描绘数据的样子,因为RMS只是负责把数据按照byte[]写入和读出。

4,一个MIDlet套件中的RecordStore可以被另外一个RecordStore

         在MIDP1.0中不可以,在MIDP2.0中推出了共享机制,通过共享可以实现

5,命名规则

         长度不超过32位的Unicode字符,大小写敏感且在MIDlet套件里面是唯一的。

具体使用使用

1,  首先应该清楚RecordStore就相当于一个数据库,你必须新建一个这样的数据库才可以开始使用RMS进行存储读取数据。新建RecordStore非常简单,可以使用下面的静态方法static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary) 
注意,后面的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)

2,对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)

3, 前面我们提到了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()来不停的移动。

4, 创建可以被共享的RecordStore
我们可以通过下面的方法来实现,必须要把authmode设置为AUTHMODE_ANY
static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary, int authmode, boolean writable)
  

访问RecordStore
如果另外一个MIDlet Suite中的MIDlet想访问的话,那么它需要知道要访问的MIDlet suite的vendorName和suiteName,一般我们可以从jad文件中得到这两个数据。我么使用如下的方法,
static RecordStore openRecordStore(String recordStoreName, String vendorName, String suiteName) 

设计rms存储库(对底层方法的封装)

其实,midp已经提供了基本的操作,我们完全可以不做任何事情也照样可以实现我们的存储要求,但是,在实际开发中要是我们每遇到不同的存储数据都要我们通过流的形式来write和read的话,确实很不方便,也就是复用性太差了。所以在实际的开发中可能需要根据实际情况来封装一下底层的接口。

刚才已经说过,rms对数据格式是没有要求的,前提是你把所有的数据转化为byte[]就OK了,所以所有问题的就落实到了如何将实际数据序列化成byte[]和反byte[]为实际数据上面来了。

提示:

1,  我们在存储数据的时候就是把数据按照我们预先定义好的格式存放到一张表里面。

2,  表由很多个字段组成。

3,  字段由名称和属性(类型)组成。

分享到:
评论

相关推荐

    RMS管理数据的系统

    #### 一、RMS系统概述 Record Management System(RMS)是一种用于管理数据的小型数据库系统,它被广泛应用于Java Micro Edition (J2ME)平台上的Mobile Information Device Profile (MIDP)应用程序中。RMS提供了一种...

    ADRMS安装部署系统设置part1

    通过本指南,读者将能够了解到ADRMS系统的整体架构、各组成部分的功能及其安装部署过程中的关键步骤。 #### 二、测试环境设置 为了确保ADRMS系统的稳定运行,需要搭建一个合适的测试环境。以下是对测试环境的基本...

    VC++ RMS2000工业组态

    《VC++ RMS2000工业组态详解》 在当今的工业自动化领域,组态软件扮演着至关重要的角色,而VC++ RMS2000就是一款专为工业控制设计的高级组态软件。它结合了强大的编程能力与直观的图形用户界面,使得工程师们能够...

    J2ME 之RMS 很基础很全面

    【J2ME RMS 知识点详解】 J2ME(Java 2 Micro Edition)是Java平台上针对嵌入式和移动设备的一种轻量级开发框架。在J2ME中,RMS(Record Management System)是一个小型的数据库管理系统,专门设计用于在资源有限的...

    RMS reference 2

    RMS(Resource Management System)作为一种先进的资源管理系统,扮演着不可或缺的角色。本篇文章将深入探讨RMS如何通过监测应用程序及其资源来保护数据的完整性,并详细阐述其故障排除过程。 #### RMS 的核心任务 ...

    《深入解析Windows操作系统 第5版》 [PDF]

    《深入解析Windows操作系统 第5版》是一本专为IT专业人士和高级用户编写的经典书籍,旨在揭示Windows操作系统的深层机制和工作原理。该书详细介绍了Windows操作系统的核心组件、设计架构以及内部运作流程,帮助读者...

    J2ME_rms数据存储详解

    **J2ME RMS数据存储详解** 在Java Micro Edition (J2ME) 平台中,Resource Management System (RMS) 是一种用于存储应用程序数据的重要机制。由于J2ME主要用于资源有限的移动设备,如手机和掌上电脑,RMS提供了一种...

    Server 2008 R2 之二十八AD RMS故障排除

    ### Windows Server 2008 R2 AD RMS 故障排除深入解析 #### 引言 在企业级网络环境中,Active Directory Rights Management Services (AD RMS) 提供了一套全面的数据保护解决方案,允许组织对敏感信息实施精细的...

    AD RMS Deployment

    ### AD RMS 部署详解 #### 概述 本文档详细介绍如何在 Active Directory (AD) 环境下安装并部署 Rights Management Services (RMS) 的步骤与配置方法。此指南由 Microsoft Corporation 发布于2008年3月,作者为 ...

    RMS文档清单.rar

    从提供的信息来看,“RMS文档清单.rar”可能是一个包含与RMS系统相关的各种文档的压缩文件。以下是根据这个标题和描述可能涉及到的一些关键知识点: 1. **资源管理系统(Resource Management System)**:这是一个...

    WindowsServer2008R2之22_ADRMS基础.pdf

    ### Windows Server 2008 R2之22_AD RMS基础知识点详解 #### 一、AD RMS概述 **Active Directory Rights Management Services (AD RMS)** 是一种集成于Microsoft Windows Server环境中的安全技术,它旨在保护敏感...

    RMS.rar_vfp_学生管理_教学管理系统

    《基于VFP的学生管理系统——RMS.rar教学解析》 在信息技术日益发达的今天,教育行业的信息化管理也变得越来越重要。本文将围绕“RMS.rar_vfp_学生管理_教学管理系统”这一主题,深入探讨其中的核心知识点,即如何...

    RMS部署方案

    ### RMS部署方案详解 #### 一、概述 RMS(Rights Management Service)即权利管理服务,是一种基于软件的安全技术,用于保护数字内容不被非法复制、分发或使用。RMS通过加密技术和策略控制,确保只有经过授权的...

    J2ME中RMS存储工具使用解析

    RMS为开发者提供了简单的方法来创建、读取、更新和删除数据,类似于小型数据库系统。在游戏开发和其他应用程序中,它常被用来保存用户的游戏进度、设置或任何其他需要长期存储的信息。 一、单一记录的构造 在使用...

    my simple project rms

    如果"myrms"是一个可执行文件,那么它可能就是RMS系统的客户端应用程序,用户可以直接运行来管理和操作资源。如果"myrms"是一个文件夹,里面可能包含了项目的源代码、配置文件、数据库脚本、文档等组成部分。 深入...

    自己写的j2me—rms引擎写的电话本

    J2ME是一种轻量级的Java平台,主要设计用于移动设备和嵌入式系统。它包含了一个名为Personal Java Profile(PJP)的子集,其中RMS是存储和管理数据的关键组件。RMS提供了一种在有限内存资源的设备上持久化数据的方法...

    J2ME RMS 封装

    J2ME RMS(Record Management System,记录管理系统)是Java Micro Edition平台中用于数据存储的一种机制。在移动设备或嵌入式系统中,由于资源限制,无法像Java SE或Android那样使用完整的数据库系统,因此J2ME引入...

    J2ME RMS 小试牛刀

    RMS(Record Management System)是J2ME中的数据存储机制,它允许应用程序在设备上保存和检索数据,类似于小型的数据库系统。本篇文章将详细介绍如何在J2ME应用中使用RMS进行数据管理,并通过一个简单的示例来演示其...

Global site tag (gtag.js) - Google Analytics