`

RMS笔记

    博客分类:
  • J2me
 
阅读更多

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

五个问题

1,什么是持久性存储

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

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

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

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

只要数据可以被转换成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, 前面我们提到了IDIndex是不同的,因为ID可能不连续,那么我们如何来遍历数据呢?很多人可能会想到使用for循环,但是由于id可能不连续,那么这个结果是无法预测的。程序很可能会失败。正是由于这样的原因,在RMS中提供了一个重要的接口RecordEnumeration。它可以遍历RecordStore中的数据。我们看看下面的方法。

RecordEnumeration enumerateRecords(RecordFilter filter, RecordComparator comparator, boolean keepUpdated)

 

在这个方法中还包括了RMS中的另外两个接口RecordFilterRecordComparator,他们是用来量身定制遍历的结果集的,你可以实现RecordFilter来决定要把什么样的数据筛选出来,通过实现RecordComparator来决定数据的排序。最后的参数keepUpdated,如果设置为true的话,那么它会跟踪RecordStore中的数据变化,并且会反映到我们列出的结果集中,要知道这是非常好费资源的操作,建议设置为falseRecordEnumeration相当于一个双向的数据链表。你可以通过调用nextRecordId()previousRecordId()来不停的移动。

 

4, 创建可以被共享的RecordStore
我们可以通过下面的方法来实现,必须要把authmode设置为AUTHMODE_ANY

static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary, int authmode, boolean writable)
  

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

 

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

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

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

 

提示:

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

2  表由很多个字段组成。

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

分享到:
评论

相关推荐

    Prepare RMS1 deployment environment.doc

    4. **本地BU配置**:进入`deployment/local`目录,编辑`rms1-server.xml`,可以参考`demo/demo-rms1-server.xml`并进行修改。这个配置文件对于RMS1服务器的运行至关重要,需要根据实际需求进行调整。 以上步骤是RMS...

    J2ME超级学习笔记

    **J2ME超级学习笔记** Java Micro Edition(J2ME)是Java技术的一个重要分支,主要针对嵌入式设备和移动设备,如手机、智能家电等。本学习笔记旨在为Java初学者和开发者提供深入理解J2ME平台的全面指南。 1. **...

    j2me手机编程笔记

    **J2ME手机编程笔记** J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,专为资源有限的嵌入式设备,如移动电话和PDA设计。这个编程笔记主要涵盖了从开发环境的搭建到J2ME的基本原理,以及相关类的使用,...

    振荡器相位噪声到 RMS 时钟抖动:根据相位噪声测量与频率计算 RMS 时间抖动。-matlab开发

    根据相位噪声测量相对于频率计算RMS时间抖动,请参阅: [1] - “振荡器相位噪声和采样时钟抖动”(RETHNAKARAN PULIKKOONATTU) 链接: ...

    hotels_rms:收入管理系统(数据科学)

    酒店RMS 收入管理系统(数据科学) 快速开始: %git clone <回购> %cd <回购> %python -m virtualenv venv %来源venv / bin / activate %pip install -r requirements.txt %jupyter笔记本

    《信号完整性与PCB设计》笔记

    笔记中的电子学概念部分首先介绍了交流波形的表征方法,如均方根(RMS),它是用来衡量交流电波形的有效值。对于正弦波而言,其RMS值是峰值的约0.707倍。在传播时间章节中,介绍了信号在介质中的传播速度与介质的相对...

    Phase Noise to Jitter:来自相位噪声与频率数据的抖动 根据相位噪声功率计算 RMS 抖动。-matlab开发

    注释标题文档提供了多个使用示例,并与应用笔记、网站、Excel 工作表和专用相位噪声实验室测量设备中提供的其他相位噪声抖动计算器进行比较。 例子: >> f = [10^0 10^1 10^3 10^4 10^6]; Lf = [-39 -73 -122 -131...

    反激变换器设计笔记.docx

    DCM模式有较好的开关特性和零电流关断,但会增加初级电流的RMS和次级输出电容的电流应力。CCM模式则适合低压大电流输出,而DCM模式适合高压小电流输出。设计时,可以选择在CCM和DCM模式的临界点,即BCM模式,以简化...

    超薄笔记本电脑电源适配器设计

    阻性损耗与电流的均方根(RMS)成正比,高功率时损耗较大;而开关损耗则与开关频率有关,低功率时,开关损耗可能成为效率的瓶颈。为了在低功率下保持高效率,可以降低开关频率,但这会增加元件的尺寸,与超薄设计的...

    欧拉公式求圆周率的matlab代码-Jupyter_Notebooks:这是Jupyter笔记本的集合,用于教学和外展

    欧拉公式求长期率的matlab代码Jupyter_Notebooks 这是Jupyter笔记本的集合,...关于Zernike波前图的功率谱密度如何随空间频率衰减以及对RMS的影响的笔记本 “兔子和狼”。 游戏中的Python脚本,可模仿生态系统和种群

    S32G3芯片参考手册

    4. "应用笔记-AN13423.pdf"和"应用笔记-AN13563.pdf":这些应用笔记提供了具体的硬件或软件实现技巧,解决实际应用中的问题,如系统集成、性能优化等。 5. "参考手册-RMS32G3GMACSUBSYS.pdf":详细阐述了S32G3内置...

    功率因数校正PFC学习笔记

    ### 功率因数校正PFC学习笔记 #### 一、重要概念解析 **功率因数(PF)**是衡量电源系统效率的关键指标之一,它定义为有功功率与视在功率的比例: \[ PF = \frac{\text{有功功率}}{\text{视在功率}} \] - **有功...

    泰克示波器使用笔记-基础篇

    ### 泰克示波器使用笔记-基础篇 #### 基本概念解析 泰克示波器作为一款广泛应用于电子工程领域的精密测量工具,在学习和掌握其使用方法之前,理解基本概念至关重要。这些概念包括最大值、最小值、峰峰值、幅度、...

    digsilent调试笔记

    digsilent调试笔记 本篇文章主要介绍了使用digsilent软件进行电力系统仿真时的变风速问题的解决方案。digsilent是一款功能强大且难以掌握的电力系统仿真软件,本文作者将其调试经验分享出来,帮助读者更好地理解和...

    j2me 学习笔记

    3. **数据存储**:MIDP提供了Record Management System (RMS)来在设备上持久化数据。 4. **网络通信**:通过HttpConnection可以实现HTTP协议的网络访问,进行数据的下载或上传。 **五、J2ME应用发布与部署** 1. *...

    SCMAD学习笔记

    例如,LCD屏幕至少需要125 X 125像素,应用运行时堆内存要求256KB,JAR文件大小限制为64KB,JAD文件大小限制为5KB,RMS数据大小不超过30KB。 2. **系统资源**:应用可以创建的最大线程数为10个,时钟分辨率要求为40...

    Digsilent学习笔记

    Digsilent学习笔记 Digsilent是风电并网领域的专业软件,通过外部文件改变风速,潮流计算出现问题如何解决。本文将详细介绍Digsilent的基本概念、控制系统、潮流计算、变风速等知识点。 一、控制系统 在Digsilent...

    泰克示波器TBS2000系列数学运算与前面板功能笔记

    - **标识解读**:“1MΏ // 13pF ≤300V RMS CAT II”这一标识表示示波器内部的检测电路中包含了一个1MΩ的电阻和一个13pF的电容并联。这组数值有助于用户了解示波器的最大输入阻抗和电容负载。 - **电压限制**:...

Global site tag (gtag.js) - Google Analytics