手机游戏中记录存储系统与存储环境

本文详细介绍了MIDP中的Record Management System (RMS),一种适用于移动设备的简单数据库解决方案。RMS允许MIDlets创建和管理记录集,通过记录ID进行数据区分。文章还讨论了如何使用字节流存储不同类型的数据,以及如何通过优化减少存储空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MIDPMIDlets提供了一种永久存储和后来读出数据的数据库解决方案,被称为Record Managerment System(RMS),是一种简单的基于记录的数据库。很显然,手机上的数据库系统不可能有PC上的强大功能。微小的存储空间也限制了它们的结构不能过于复杂。RMS是专门针对移动设备的服务的。
RMS包中包括RecordStore类。在一个MIDlet suite包里的所有MIDlet都允许创建多个记录集,只要它们被赋于不同的名称。当MIDlet包从平台中被移除后,所有与该包有关的的记录集都同时会被移除。同一个包内的MIDlets可以直接互相访问它们的记录集,不同包内也可产生共享,但这需要有包的授权属性决定。访问模式会在准备提供共享的RecordStore建立时被创建。访问模式允许私有使用或访问。
RecordStoreAPI采用了时间戳的概念,其长整型变量由SystemcurrentTimeMillis()函数返回决定。Record store 每次被修改后都会自动在其属性上附加上时间戳,这为同步化引擎和程序的控制都极为有效。
记录是字节数组。开发者可以利用InputStream的派生类DataInputStreamDataOutputStream以及ByteArrayInputStreamByteArrayOutputStream将不同种类的数据类型打包,以字节流的形式发送和接收。
区别记录的唯一标记是他们的ID值,作为记录集的主键。第一项记录的ID1,其后的每个记录ID递增。
Record是以字节为基本单位来存放的,所以所有要写入record的数据都必须先将其转为字节才能写入,从record所读出来的数据也是字节,必须将其转换为原先写入时的数据类型才有意义。
然而读取或写入的字节数组都只能代表一个字段的信息,如果需要读取或写入多个字段就必须要将数据转换成字节信息,并且提供适当的机制来分隔这些信息。主要有两种方法:
1.    标记法。
将所有要存放的数据用字符串表示,但是在字段和字段之间以一个特殊的符号作为分隔。符号不能和字段内的数据相同的字符。
2.利用输入/输出流
这一种方法较上一种复杂,但是较为实用。方法一中所有的字段只能以字符串的形式存储,要对这些字段作进一步的处理非常麻烦。利用输入输出流可以写入及读取不同数据类型的数据,做法是在写入数据时先将一个DataOutputStream数据流对象串接到一个ByteArrayOutStream数据流对象,然后再依字段的数据类型用writeInt()writeBoolean()等方法写入,最后把ByteArrayOutputStream内的元素数据写入record中。反之若要读取数据,则先要串接一个DataInputStream对象和ByteArrayInputStream,依字段的数据类用readInt()readBoolean()等方法读取。
    本程序中主要存放在永久区的内容为用户得到的最高分数的记录。每次有新的更高的记录就会插入进相应的位置,将原来的记录排挤出记录。
通常在MIDP应用程序的手机执行环境中,所牵涉的内存有下列三种:
⒈应用程序存储内存
RecordStore存储内存
⒊执行时期内存(Java Heap)
其中前两种是持久性的内存,关闭电源后还能保持数据的正确性,通常这两种内存所能存储的容量是合并计算的,这个上限对每种手机都不一样,大部分在一两百KB内。在这样的情况下需要在不影响原有功能的情况下适当的缩减JAR文件的大小,除了可以克服内存空间的限制外,也能大幅度缩短下载的时间(费用也降低了),势必会有更多的人愿意下载所开发的程序。其方法有:
第一,就是尽量缩短命名的长度。在应用程序内,对于所建立的类、接口、方法及变量名而言,都需要赋予一个识别的名称,所命名的名称每多一个字符就会在类文件内多产生一个字节,对于一个较复杂的应用程序而言就会增加为数不小的数据量。所有这些可以借助混淆器来帮助实现。
第二,减少复杂的程序结构,为一些共同的行为建立一个抽象类(Abstract Class) 来表示继承的子类的共通性。
第三,减少图形数据的大小。将PNG格式的小分辨率图象合并在一张大的高分辨率图象中,由于减少了chunks,将比合并前的总大小减少许多。
注:部分内容摘自Michael Morrison著 /李强译《 J2ME手机游戏编程入门 》及刘斌著《J2ME手机开发入门》
转载至:http://gaochaojs.blog.51cto.com/812546/204445
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值