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

简介:

MIDPMIDlets提供了一种永久存储和后来读出数据的数据库解决方案,被称为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手机开发入门》


     本文转自 gaochaojs 51CTO博客,原文链接:http://blog.51cto.com/jncumter/204445,如需转载请自行联系原作者



相关文章
|
2月前
|
算法
鬼手操控着你的手机?大模型GUI智能体易遭受环境劫持
【9月更文挑战第27天】近年来,随着人工智能技术的发展,多模态大语言模型(MLLM)在图形用户界面(GUI)中广泛应用,提升了交互体验。然而,最新研究《环境警示:多模态智能体易受环境干扰》指出,这些智能体可能因环境干扰而行为失准。作者通过实验展示了即使是强大模型也会受无关因素影响,导致不可靠或不可预测的行为。研究还证实,通过环境注入攻击可进一步加剧此问题。尽管如此,多模态GUI智能体依然潜力巨大,未来需改进感知能力和算法以增强鲁棒性,解决环境干扰问题。论文详细内容见:https://arxiv.org/abs/2408.02544。
53 8
|
2月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
3月前
|
存储 NoSQL Java
使用redis进行手机验证码的验证、每天只能发送三次验证码 (redis安装在虚拟机linux系统中)
该博客文章展示了如何在Linux虚拟机上使用Redis和Jedis客户端实现手机验证码的验证功能,包括验证码的生成、存储、验证以及限制每天发送次数的逻辑,并提供了测试结果截图。
使用redis进行手机验证码的验证、每天只能发送三次验证码 (redis安装在虚拟机linux系统中)
|
3月前
|
存储 数据可视化 C语言
【C语言】C语言 手机通讯录系统的设计 (源码+数据+论文)【独一无二】
【C语言】C语言 手机通讯录系统的设计 (源码+数据+论文)【独一无二】
|
3月前
|
Android开发
【Azure 环境】记录使用Notification Hub,安卓手机收不到Push通知时的错误,Error_Code 30602 or 30608
【Azure 环境】记录使用Notification Hub,安卓手机收不到Push通知时的错误,Error_Code 30602 or 30608
|
3月前
【Azure 环境】中国区Azure B2C 是否支持手机验证码登录呢?
【Azure 环境】中国区Azure B2C 是否支持手机验证码登录呢?
|
3月前
|
存储 Android开发 iOS开发
【Azure 环境】台湾同胞:詢問大陸所有廠牌手機是否都可透過通知中心發送訊息
【Azure 环境】台湾同胞:詢問大陸所有廠牌手機是否都可透過通知中心發送訊息
|
3月前
|
存储 前端开发 算法
|
3月前
|
存储 小程序 JavaScript
|
3月前
|
存储 小程序 JavaScript
下一篇
无影云桌面