<!-- Error -->
MIDP应用程序的标准持久化方案就是使用RMS。RMS类似于一个小型数据库,RecordStore相当于数据库的表,每个“表”由若干记录(Record)构成,一条记录就是一个用int表示的记录号RecordID和用byte[]表示的内容。记录号可以看作是“主键”,byte[]数组存储内容。
RMS提供的记录操作可以实现根据ID直接获得记录,或者枚举出一个表中的所有记录。
枚举记录是非常低效的,因为只能比较byte[]数据来确定该记录是否是所需的记录。通过ID获得记录是高效而方便的,类似于SQL语句“SELECT byteArrayData FROM recordStoreName WHERE RecordID=?”。然而,通常应用程序很难知道某条记录的ID号,而RMS记录的“主键”又仅限于int类型,无法使用其他类型如String作为“主键”来查找。因此,对于需要存取不同类型对象的应用程序而言,就需要一个灵活的RMS操作框架。
我们的基本设想是,如果能使用String作为“主键”来查找记录,就能非常方便地获得所需的内容。例如,应用程序设置可以通过"sys.settings"获得byte[]数组,并依次读取出设置,用户登录信息可以通过"user.info"获得byte[]数组,再分解出用户名和口令。
因此,我们实现一个StorageHandler类,提供唯一的RMS访问接口,使得其他类完全不必考虑底层的RMS操作,只需提供能标识自身的一个String即可。
如果我们能实现一种类似于数据库索引的查找表,就能根据String关键字查找某条记录。因此,我们使用一个名为"index"的RecordStore来存储所有的索引,每一条索引都指向某一条具体记录的ID,设计一个IndexEntry表示一条索引:
class IndexEntry {
private int selfId; // IndexEntry的ID
private int recordId; // 对应记录的ID
private String key; // 访问记录的Key
}
根据索引查找,分3步进行:
1.在名为"index"的RecordStore中根据String查找对应的IndexEntry。
2.取出IndexEntry,获得记录ID号。
3.根据ID号获得另一个RecordStore的记录,然后就可以读取、更新和删除该记录。
如下图所示:
由于IndexEntry保存的数据很少,为了加快查找速度,可以在应用程序启动时,把所有的IndexEntry读入一个Vector,在后面的操作中更新这个Vector并与RecordStore保持同步。
为了处理不同类型的数据,所有可通过StorageHandler存取的类都必须实现一个Storable接口:
public interface Storable {
String getKey();
void getData(DataOutputStream output) throws IOException;
void setData(DataInputStream input) throws IOException;
}
前面已经提到,在MIDP应用程序中,序列化一个类的最佳方法是使用DataInputStream和DataOutputStream。因此,需要持久化的类可以通过getData()和setData()方法非常方便地存取。假定应用程序的类UserInfo保存了用户的登录名、口令和是否自动登录的信息:
public class UserInfo {
String username;
String password;
boolean autoLogin;
}
为了能将UserInfo存入RMS,需要实现Storable接口:
class UserInfo implements Storable {
String username;
String password;
boolean autoLogin;
public String getKey() { return "user.info"; } // 提供一个唯一标识符即可
public void getData(DataOutputStream output) throws IOException {
output.writeUTF(username);
output.writeUTF(password);
output.writeBoolean(autoLogin);
}
public void setData(DataInputStream input) throws IOException {
username = input.readUTF();
password = input.readUTF();
autoLogin = input.readBoolean();
}
// getters here...
}
要保存UserInfo,只需调用StorageHandler的保存方法:
StorageHandler.storeOrUpdate(userinfo);
要读取UserInfo,调用StorageHandler的读取方法:
UserInfo userinfo = new UserInfo();
StorageHandler.load(userinfo);
这样,需要读取或保存数据的类完全不必涉及底层的RMS操作,大大简化了应用程序的设计,增强了源代码的可复用性与可维护性。
相关推荐
**J2ME移动应用开发讲义** Java 2 Micro Edition(J2ME)是Java平台的一个子集,专为资源有限的嵌入式设备,如移动电话、...同时,理解J2ME的基本原理和最佳实践,对于理解其他嵌入式和移动开发平台也有一定的帮助。
最后,指南可能涵盖一些最佳实践,如代码优化、错误处理、内存管理和应用性能监控,这些都是确保无线应用高效稳定的关键。 总的来说,“J2ME无线设备编程指南”将指导开发者了解并掌握无线设备编程的基本概念和...
本资源包含了大量的J2ME源代码和实例,这些例子旨在帮助开发者从基础到进阶全面理解J2ME编程。下面将详细阐述J2ME的关键概念、重要技术以及这些源代码可能涵盖的领域。 1. **J2ME架构**:J2ME的架构主要由配置...
通过阅读和分析这些代码,你可以学习到实际项目中的最佳实践和技术细节。 学习并熟练掌握这些知识点,你将能够开发出适用于各种J2ME设备的应用程序,无论是实用工具还是娱乐游戏,都能游刃有余。同时,随着移动技术...
Java 2 Micro Edition (J2ME) 是一种Java平台,专为嵌入式设备和移动设备设计,如手机、智能手表、电视盒等。...记住,实践是检验理论的最佳方式,多动手编写代码,才能更好地理解和掌握J2ME的魅力。
#### J2ME的设计模式与最佳实践 - **MVC架构**:采用模型-视图-控制器的设计模式,分离数据、展示逻辑和控制逻辑。 - **远程数据存储**:利用Record Management System (RMS)进行数据持久化。 - **统一用户界面**:...
Java 2 Micro Edition(J2ME)是一种针对嵌入式设备和移动平台的Java应用程序开发框架。这个压缩包“j2me开发程序源代码”包含了若干个与J2ME...同时,这也可以帮助开发者了解J2ME编程的最佳实践,提升解决问题的能力。
通过研究郭克华老师的J2ME源代码,开发者不仅可以掌握J2ME的基本概念和技术,还能了解到实际项目中的最佳实践,这对于提升J2ME应用开发技能非常有帮助。同时,这些代码也可以作为学习者解决问题和调试的参考,有助于...
在"J2ME手机开发资源"中,我们可以找到一系列关于手机软件开发的重要文档,这些文档涵盖了J2ME开发的各个方面,包括基础概念、编程模型、API使用、调试技巧以及最佳实践等。以下是一些关键知识点的详细解释: 1. **...
Java Micro Edition(J2ME)是Java平台的一个子集,主要...通过这些源代码,开发者不仅可以理解J2ME的基本结构和API,还能学习到实际开发中的最佳实践和技巧。无论你是初学者还是有经验的开发者,都能从中受益匪浅。
**J2ME开发的phonebook** 是一...通过深入研究phonebook的源代码,开发者不仅可以掌握J2ME的基本编程技术,还能了解到实际开发中的一些最佳实践和技巧。这对于想要进入移动开发领域的程序员来说是一份宝贵的参考资料。
通过研究这些教程,开发者不仅可以理解J2ME的架构和组件,还能学习到如何利用IBM的工具和最佳实践来提高开发效率和应用质量。在移动互联网飞速发展的今天,掌握J2ME技术对于想要进入嵌入式和移动开发领域的人来说至...
Java 2 Micro Edition(J2ME)是一种Java平台,专门设计...通过这份北京交通大学的J2ME教程PPT,学习者不仅可以了解上述知识点,还能深入理解J2ME开发过程中的各种技巧和最佳实践,为成为合格的J2ME开发者奠定基础。
通过深入研究"Enterprise J2ME 源码",开发者不仅可以提升J2ME编程技能,还能了解到企业级应用的架构设计和最佳实践,这对于理解移动应用开发的历史以及当前移动平台的发展有重要价值。虽然现在J2ME已被其他技术如...
本部分将详细介绍J2ME游戏开发所需的基础知识,包括关键概念、API使用以及最佳实践等。 ##### 2.1 J2ME API概览 J2ME的核心API包括MIDP(Mobile Information Device Profile)和CLDC(Connected Limited Device ...
在这个“J2me自动登录的源代码”实例中,我们将探讨如何在J2ME环境中实现一个自动登录功能,从而提升用户使用应用程序的便利性。 自动登录功能通常是基于存储的用户凭证,例如用户名和密码,来快速建立用户的会话,...
**J2ME开发详解** Java 2 Micro Edition(J2ME)是Java平台的一个...《J2ME_devtools.pdf》这份文档很可能是关于这些主题的详细指南,包含了工具的使用、实例代码以及最佳实践,对于J2ME开发者来说是一份宝贵的资源。
10. **最佳实践**:获取关于代码优化、资源管理以及适应不同设备的开发策略。 通过郭克华老师的视频讲义,初学者不仅可以理解J2ME的基本原理,还能获得实际项目开发的经验,从而提升技能并快速进入移动开发领域。...
**J2ME中文教程FromIBM手机...学习这个教程,开发者不仅可以了解J2ME的基础知识,还能掌握IBM提供的专业见解和最佳实践,为开发移动应用打下坚实基础。结合实际练习和项目,将理论与实践相结合,可以更有效地提升技能。