最近在看一个关于J2ME的英语游戏项目,由于没有什么经验,所以做一些学习记录。
1.认识JAD文件。
首先,介绍什么是JAD文件。JAD是Java 应用程序描述符。JAD文件是软件配置的信息文件,也就是说是Java用用程序的描述器文件。JAR才是真正的程序,你可以把两个文件放在一起安装JAD,也可以直接安装JAR文件。(JAD 文件包含 MIDlet 套件的标题信息,例如开发应用程序的公司、应用程序名称和大小。在将应用程序下载到设备上时,将先下载和读取描述符,然后再下载和读取包含 MIDP 应用程序的 JAR 文件。在装入 MIDlet 套件的完整 JAR 文件之前,移动设备上的应用程序管理软件可使用 JAD 文件验证 MIDlet 是否适用于该设备。JAD 还向 MIDlet 提供特定于配置的属性(参数),而无需修改 JAR 文件。这样设备便可以确认是否具有足够的空间用于存放应用程序,以及是否应下载完整的应用程序。)
其次,介绍下它的作用,一方面它可以向应用程序管理器提供信息,说明jar的内容。另一方面它能够提供一种方法,把参数传送到MIDlet,这样就可以不必修改jar文件,省去很多麻烦。
最后,说下它的反编译功能。JAD是非常好的java反编译工具,可以直接使用命令行对java的.class文件进行反编译。如:c:\java\>jad a.class 执行便可以将.class文件反编译成a.jad文件,然后改名为a.java文件即可。也有很多软件利用了jad的反编译原理并且提供了相对人性化的图形界面,使用更加方便。
2.认识Perst 数据库
首先,介绍Perst。Perst 是McObject 公司发布的一款非常袖珍的开源嵌入式数据库,是一个简单,快速,便捷,面向对象适合Java与.NET的数据库。Perst不需要专门的编译器或与预处理器,并且支持ACID事务。能够有效的处理移动设备上的大量数据,Perst直接将对象以Java或者C#对象的形式进行存储。因此不需要在对象的内部表现形式和Java/C#表现形式之间转换。可以和SQL Lite的数据兼容互导。具体的原理可以参见http://database.51cto.com/art/201103/247558.htm;
其次,Perst的使用。在该项目中用到的包是perst-rms.jar,如果选择以文件形式存储数据就选择perst-jsr75.jar,Perst 数据库支持 MIDP/CLDC 1.1 (java应用程序编写需要遵照的规范)。它的使用与我们常用的关系型数据库有些不同。它会1)定义一个类,其结构与数据表结构一样,继承于Persistent.2) 然后再给此类定义一个索引类,继承于Persistent 3)再要调用数据库的地方打开数据库。如:
(1)
public class User extends Persistent
{
long id; // 唯一
String name; // 不唯一
public void writeObject(IOutputStream out)
{ out.writeLong(id);
out.writeString(name);
}
public void readObject(IInputStream in)
{ id = in.readLong();
name = in.readString();
}
public User() // 空构造函数,必须
{}
public User(Storage db, User simple)
{ super(db);
id = simple.id;
name = simple.name;
}
}
(2)Root对象(Perst的特色,作用:类似于索引)
public class Root extends Persistent
{Index userId; // 以用户id为索引
Index userName; // 以用户名为索引
public void readObject(IInputStream in)
{ userId = (Index) in.readObject();
userName = (Index) in.readObject();
}
public void writeObject(IOutputStream out)
{ out.writeObject(userId);
out.writeObject(userName);
}
public Root(){}
public Root(Storage db)
{
super(db);
userId = db.createIndex(Types.Long, true); // 在索引表中唯一
userName = db.createIndex(Types.String, false); // 不唯一
}
}
(3)初次运行,创建、打开数据库,并返回Root
Storage db = StorageFactory.getInstance().createStorage();
db.open("test.dbs");
Root root = (Root) db.getRoot();
if (root == null)
{ root = new Root(db);
db.setRoot(root);
}
添加用户对象
Storage db = StorageFactory.getInstance().createStorage();
Root root = (Root) db.getRoot();
User dbUser = new User(db, simple);
root.userId.put(new Key(dbUser.id), dbUser);//用户id索引
root.userName.put(dbUser.name, dbUser);//用户名索引
db.commit();//提交事务
同样可以执行更新和删除等