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

MIDP MIDlets 提供了一种永久存储和后来读出数据的数据库解决方案,被称为 Record Managerment System(RMS) ,是一种简单的基于记录的数据库。很显然,手机上的数据库系统不可能有 PC 上的强大功能。微小的存储空间也限制了它们的结构不能过于复杂。 RMS 是专门针对移动设备的服务的。
RMS 包中包括 RecordStore 类。在一个 MIDlet suite 包里的所有 MIDlet 都允许创建多个记录集,只要它们被赋于不同的名称。当 MIDlet 包从平台中被移除后,所有与该包有关的的记录集都同时会被移除。同一个包内的 MIDlets 可以直接互相访问它们的记录集,不同包内也可产生共享,但这需要有包的授权属性决定。访问模式会在准备提供共享的 RecordStore 建立时被创建。访问模式允许私有使用或访问。
RecordStore API 采用了时间戳的概念,其长整型变量由 System currentTimeMillis() 函数返回决定。 Record store 每次被修改后都会自动在其属性上附加上时间戳,这为同步化引擎和程序的控制都极为有效。
记录是字节数组。开发者可以利用 InputStream 的派生类 DataInputStream DataOutputStream 以及 ByteArrayInputStream ByteArrayOutputStream 将不同种类的数据类型打包,以字节流的形式发送和接收。
区别记录的唯一标记是他们的 ID 值,作为记录集的主键。第一项记录的 ID 1,其后的每个记录 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值