|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C++编译的是本地码,优点是启动快,而且可以精确控制资源因此可以开发很高效的程序.缺点是编程麻烦,而且容易留下安全隐患.跨平台靠源代码在各个平台间分别编译(一处编写到处编译)编程 MIDP使用程序的尺度耐久化计划就是利用RMS。RMS相似于一个小型数据库,RecordStore相称于数据库的表,每一个“表”由多少纪录(Record)组成,一笔记录就是一个用int暗示的纪录号RecordID和用byte[]暗示的内容。纪录号能够看做是“主键”,byte[]数组存储内容。
RMS供应的纪录操纵能够完成依据ID间接取得纪录,大概列举出一个表中的一切纪录。
列举纪录长短常低效的,由于只能对照byte[]数据来断定该纪录是不是是所需的纪录。经由过程ID取得纪录是高效而便利的,相似于SQL语句“SELECTbyteArrayDataFROMrecordStoreNameWHERERecordID=?”。但是,一般使用程序很难晓得某笔记录的ID号,而RMS纪录的“主键”又仅限于int范例,没法利用其他范例如String作为“主键”来查找。因而,关于必要存取分歧范例对象的使用程序而言,就必要一个天真的RMS操纵框架。
我们的基础假想是,假如能利用String作为“主键”来查找纪录,就可以十分便利地取得所需的内容。比方,使用程序设置能够经由过程"sys.settings"取得byte[]数组,并顺次读掏出设置,用户登录信息能够经由过程"user.info"取得byte[]数组,再分化出用户名和口令。
因而,我们完成一个StorageHandler类,供应独一的RMS会见接口,使得其他类完整不用思索底层的RMS操纵,只需供应能标识本身的一个String便可。
假如我们能完成一品种似于数据库索引的查找表,就可以依据String关头字查找某笔记录。因而,我们利用一个名为"index"的RecordStore来存储一切的索引,每条索引都指向某一条详细纪录的ID,计划一个IndexEntry暗示一条索引:
classIndexEntry{
privateintselfId;//IndexEntry的ID
privateintrecordId;//对应纪录的ID
privateStringkey;//会见纪录的Key
}
依据索引查找,分3步举行:
1.在名为"index"的RecordStore中依据String查找对应的IndexEntry。
2.掏出IndexEntry,取得纪录ID号。
3.依据ID号取得另外一个RecordStore的纪录,然后就能够读取、更新和删除该纪录。
以下图所示:
因为IndexEntry保留的数据很少,为了加速查找速率,能够在使用程序启动时,把一切的IndexEntry读进一个Vector,在前面的操纵中更新这个Vector并与RecordStore坚持同步。
为了处置分歧范例的数据,一切可经由过程StorageHandler存取的类都必需完成一个Storable接口:
publicinterfaceStorable{
StringgetKey();
voidgetData(DataOutputStreamoutput)throwsIOException;
voidsetData(DataInputStreaminput)throwsIOException;
}
后面已提到,在MIDP使用程序中,序列化一个类的最好办法是利用DataInputStream和DataOutputStream。因而,必要耐久化的类能够经由过程getData()和setData()办法十分便利地存取。假定使用程序的类UserInfo保留了用户的登录名、口令和是不是主动登录的信息:
publicclassUserInfo{
Stringusername;
Stringpassword;
booleanautoLogin;
}
为了能将UserInfo存进RMS,必要完成Storable接口:
classUserInfoimplementsStorable{
Stringusername;
Stringpassword;
booleanautoLogin;
publicStringgetKey(){return"user.info";}//供应一个独一标识符便可
publicvoidgetData(DataOutputStreamoutput)throwsIOException{
output.writeUTF(username);
output.writeUTF(password);
output.writeBoolean(autoLogin);
}
publicvoidsetData(DataInputStreaminput)throwsIOException{
username=input.readUTF();
password=input.readUTF();
autoLogin=input.readBoolean();
}
//gettershere...
}
要保留UserInfo,只需挪用StorageHandler的保留办法:
StorageHandler.storeOrUpdate(userinfo);
要读取UserInfo,挪用StorageHandler的读取办法:
UserInfouserinfo=newUserInfo();
StorageHandler.load(userinfo);
如许,必要读取或保留数据的类完整不用触及底层的RMS操纵,年夜年夜简化了使用程序的计划,加强了源代码的可复用性与可保护性。
再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。 |
|