colonleado's

关于游戏也关于技术 im Co
数据加载中……
一个J2me的RMS的使用类

使用很方便~

写入:打开~存存存存存~写~关~

读取:打开~读~关~取得取得取得取得~


最好自己写几个宏定义

比如我们的储存顺序是:主角的生命、金钱、当前时间

那么写:

public static final byte RMS_SAVE_LIST_ROLE_HP_SHORT = 0;// 主角的hp是以short类型来保存的

public static final byte RMS_SAVE_LIST_MONEY_INT = 1;// 金钱是以int类型保存

public static final byte RMS_SAVE_LIST_CURTIME_INT = 2;// 同上

在读取记录时就可以

CRMSManager.getShort(RMS_SAVE_LIST_ROLE_HP_SHORT);


基础类型接口----------------------------------------

声明了我们可以保存的所有数据类型 有需要可以自己添加新的数据类型并且自实现其add和read块

public interface CBaseData {

    
public static final byte 
    DATA_BYTE 
= 0
    DATA_SHORT 
= 1
    DATA_INT 
= 2
    DATA_CHAR 
= 3
    DATA_STRING 
= 4
    DATA_BOOLEAN 
= 5
    DATA_BYTE_ARRAY 
= 6
    DATA_SHORT_ARRAY 
= 7
    DATA_INT_ARRAY 
= 8
    DATA_CHAR_ARRAY 
= 9
    DATA_STRING_ARRAY 
= 10
    DATA_BOOLEAN_ARRAY 
= 11;
    
}


RMS数据库管理器----------------------------------------

其实就是个双链表 把我们的保存的数据类型也都按顺序记录下来了

*注意:禁止保存如add(8);这样的因为8默认是int类型所以会调用add(int args0)这个方法 但是有可能我们只想保存一个byte而已,所以为了严谨性,我们一律都要写成:byte temp = 8; add(temp); 这样显示的声明变量temp是一个byte,才能成功调用add(byte args0);

里面用到的CDataOutputStream、CDataInputStream、CByteVector、CVector 只是自己封装的几个通用类

可以用DataOutputStream、DataInputStream

CByteVector 只是一个存放比特数的容器

CVector 就是vector

 
使用方法

// the example of this class for user

public void saveGame(){
    
    
    CRMSManager.openRMS(CRMSManager.RMS_NAME1, 
true);
    
    
// TODO: add game data to the recordMemoryStore /CRMSManager.add
    
    CRMSManager.write();
    
    CRMSManager.closeRMS();
    
    CRMSManager.free();
    
}


public void readGame(){
    
    CRMSManager.openRMS(CRMSManager.RMS_NAME1, 
false);
    
    CRMSManager.read();
    
    CRMSManager.closeRMS();
    
    
// TODO: set the elements from data(CVector) to the game data /CRMSManager.get
    
    CRMSManager.free();
    
}




下面是源代码 可以按照上面给出的使用方法直接使用


 

public class CRMSManager implements CBaseData{
    
    
public static final 
    String RMS_NAME1 
= "GAME_DATA";
    
    
private static 
    RecordStore rec 
= null;
    
    
private static 
    CDataOutputStream cdos 
= null;
    
    
private static 
    CDataInputStream cdis 
= null;
    
    
private static CByteVector dataList = null;
    
    
public static 
    CVector data 
= null;
    
    
public static void free(){
        
        
if(dataList != null){
            
            dataList.removeAllElements();
            
            dataList 
= null;
            
        }

        
        
if(data != null){
            
            data.removeAllElements();
            
            data 
= null;
            
        }

        
    }

    
    
    
public static void openRMS(String name, boolean isWrite){
        
        
if(rec != null)
            
            
return;
        
        
try {
            
            rec 
= RecordStore.openRecordStore(name, true);
            
            
if(isWrite)
                
                cdos 
= new CDataOutputStream();
            
            
else
                
                data 
= new CVector();
                
            dataList 
= new CByteVector();
            
        }
 catch (RecordStoreFullException e) {
            
            e.printStackTrace();
            
        }
 catch (RecordStoreNotFoundException e) {
            
            e.printStackTrace();
            
        }
 catch (RecordStoreException e) {
            
            e.printStackTrace();
            
        }

        
    }

    
    
    
public static void read(){
        
        
try {
            
            
byte list[] = rec.getRecord(1);
            
            
byte tmp[] = rec.getRecord(2);
            
            cdis 
= new CDataInputStream(tmp);
            
            
for(int i = 0; i < list.length; ++ i){
                
                dataList.addElement(list[i]);
                
                
switch(list[i]){
                
                
case DATA_BOOLEAN:
                    
                    data.addElement(readBoolean());
                    
                    
break;
                    
                
case DATA_BOOLEAN_ARRAY:
                    
                    data.addElement(readBooleanArray());
                    
                    
break;
                    
                
case DATA_CHAR:
                    
                    data.addElement(readChar());
                    
                    
break;
                    
                
case DATA_CHAR_ARRAY:
                    
                    data.addElement(readCharArray());
                    
                    
break;
                    
                
case DATA_INT:
                    
                    data.addElement(readInt());
                    
                    
break;
                    
                
case DATA_BYTE:
                    
                    data.addElement(readByte());
                    
                    
break;
                    
                
case DATA_SHORT:
                    
                    data.addElement(readShort());
                    
                    
break;
                    
                
case DATA_INT_ARRAY:
                    
                    data.addElement(readIntArray());
                    
                    
break;
                    
                
case DATA_BYTE_ARRAY:
                    
                    data.addElement(readByteArray());
                    
                    
break;
                    
                
case DATA_SHORT_ARRAY:
                    
                    data.addElement(readShortArray());
                    
                    
break;
                    
                
case DATA_STRING:
                    
                    data.addElement(readString());
                    
                    
break;
                    
                
case DATA_STRING_ARRAY:
                    
                    data.addElement(readStringArray());
                    
                    
break;
                    
                }

                
            }

            
        }
 catch (RecordStoreNotOpenException e) {
            
            e.printStackTrace();
            
        }
 catch (InvalidRecordIDException e) {
            
            e.printStackTrace();
            
        }
 catch (RecordStoreException e) {
            
            e.printStackTrace();
            
        }
 catch (IOException e) {
            
            e.printStackTrace();
            
        }

        
    }

    
    
    
public static void write(){
        
try {
            
            cdos.flush();
            
            
byte [] tmp = CDataOutputStream.baos.toByteArray();
            
            
if(isEmpty()){
                
                rec.addRecord(dataList.object, 
0, dataList.object.length);
                
                rec.addRecord(tmp, 
0, tmp.length);
                
            }
else{
                
                rec.setRecord(
1, dataList.object, 0, dataList.object.length);
                
                rec.setRecord(
2, tmp, 0, tmp.length);
                
            }

            
        }
 catch (IOException e) {
            
            e.printStackTrace();
            
        }
 catch (RecordStoreNotOpenException e) {
            
            e.printStackTrace();
            
        }
 catch (RecordStoreFullException e) {
            
            e.printStackTrace();
            
        }
 catch (RecordStoreException e) {
            
            e.printStackTrace();
            
        }

        
    }

    
    
public static void closeRMS(){
        
        
if(rec == null)
            
            
return;
        
        
try {
            
            rec.closeRecordStore();
            
            rec 
= null;
            
            
if(cdos != null)
                
                cdos.free();
            
            
if(cdis != null)
                
                cdis.free();
            
        }
 catch (RecordStoreNotOpenException e) {
            
            e.printStackTrace();
            
        }
 catch (RecordStoreException e) {
            
            e.printStackTrace();
            
        }

        
    }

    
    
    
public static void add(int args0) throws IOException{
        
        dataList.addElement(DATA_INT);
        
        cdos.writeInt(args0);
        
    }

    
    
public static void add(byte args0) throws IOException{
        
        dataList.addElement(DATA_BYTE);
        
        cdos.writeByte(args0);
        
    }

    
    
public static void add(short args0) throws IOException{
        
        dataList.addElement(DATA_SHORT);
        
        cdos.writeShort(args0);
        
    }

    
    
public static void add(boolean args0) throws IOException{
        
        dataList.addElement(DATA_BOOLEAN);
        
        cdos.writeBoolean(args0);
        
    }

    
    
public static void add(char args0) throws IOException{
        
        dataList.addElement(DATA_CHAR);
        
        cdos.writeChar(args0);
        
    }

    
    
public static void add(String args0) throws IOException{
        
        dataList.addElement(DATA_STRING);
        
        cdos.writeUTF(args0);
        
    }

    
    
public static void add(int[] args0) throws IOException{
        
        dataList.addElement(DATA_INT_ARRAY);
        
        cdos.writeInt(args0.length);
        
        
for(int i = 0; i < args0.length; ++ i){
            
            cdos.writeInt(args0[i]);
            
        }

        
    }

    
    
public static void add(byte[] args0) throws IOException{
        
        dataList.addElement(DATA_BYTE_ARRAY);
        
        cdos.writeInt(args0.length);
        
        
for(int i = 0; i < args0.length; ++ i){
            
            cdos.writeByte(args0[i]);
            
        }

        
    }

    
    
public static void add(short[] args0) throws IOException{
        
        dataList.addElement(DATA_SHORT_ARRAY);
        
        cdos.writeInt(args0.length);
        
        
for(int i = 0; i < args0.length; ++ i){
            
            cdos.writeShort(args0[i]);
            
        }

        
    }

    
    
public static void add(boolean[] args0) throws IOException{
        
        dataList.addElement(DATA_BOOLEAN_ARRAY);
        
        cdos.writeInt(args0.length);
        
        
for(int i = 0; i < args0.length; ++ i){
            
            cdos.writeBoolean(args0[i]);
            
        }

        
    }

    
    
public static void add(char[] args0) throws IOException{
        
        dataList.addElement(DATA_CHAR_ARRAY);
        
        cdos.writeInt(args0.length);
    
        
for(int i = 0; i < args0.length; ++ i){
            
            cdos.writeChar(args0[i]);
            
        }

        
    }

    
    
    
public static void add(String[] args0) throws IOException{
        
        dataList.addElement(DATA_STRING_ARRAY);
        
        cdos.writeInt(args0.length);
        
        
for(int i = 0; i < args0.length; ++ i){
            
            cdos.writeUTF(args0[i]);
            
        }

        
    }

    
    
private static Byte readByte() throws IOException{
        
        
return new Byte(cdis.readByte());
        
    }

    
    
private static Short readShort() throws IOException{
        
        
return new Short(cdis.readShort());
        
    }

    
    
    
private static Integer readInt() throws IOException{
        
        
return new Integer(cdis.readInt());
        
    }

    
    
private static Boolean readBoolean() throws IOException{
        
        
return new Boolean(cdis.readBoolean());
        
    }

    
    
private static Character readChar() throws IOException{
        
        
return new Character(cdis.readChar());
        
    }

    
    
private static String readString() throws IOException{
        
        
return cdis.readUTF();
        
    }

    
    
    
private static int[] readIntArray() throws IOException{
        
        
int size = cdis.readInt();
        
        
int[] tmp = new int[size];
        
        
for(int i = 0; i < size; ++ i){
            
            tmp[i] 
= cdis.readInt();
            
        }

        
        
return tmp;
        
    }

    
    
private static byte[] readByteArray() throws IOException{
        
        
int size = cdis.readInt();
        
        
byte[] tmp = new byte[size];
        
        
for(int i = 0; i < size; ++ i){
            
            tmp[i] 
= cdis.readByte();
            
        }

        
        
return tmp;
        
    }

    
    
private static short[] readShortArray() throws IOException{
        
        
int size = cdis.readInt();
        
        
short[] tmp = new short[size];
        
        
for(int i = 0; i < size; ++ i){
            
            tmp[i] 
= cdis.readShort();
            
        }

        
        
return tmp;
        
    }

    
    
private static boolean[] readBooleanArray() throws IOException{
        
        
int size = cdis.readInt();
        
        
boolean[] tmp = new boolean[size];
        
        
for(int i = 0; i < size; ++ i){
            
            tmp[i] 
= cdis.readBoolean();
            
        }

        
        
return tmp;
        
    }

    
    
    
private static char[] readCharArray() throws IOException{
        
        
int size = cdis.readInt();
        
        
char[] tmp = new char[size];
        
        
for(int i = 0; i < size; ++ i){
            
            tmp[i] 
= cdis.readChar();
            
        }

        
        
return tmp;
        
    }

    
    
private static String[] readStringArray() throws IOException{
        
        
int size = cdis.readInt();
        
        String[] tmp 
= new String[size];
        
        
for(int i = 0; i < size; ++ i){
            
            tmp[i] 
= cdis.readUTF();
            
        }

        
        
return tmp;
        
    }

    
    
    
    
public static void deleteRecrodInfo(int id){
        
        
try {
            
            rec.deleteRecord(id);
            
        }
 catch (RecordStoreNotOpenException e) {
            
            e.printStackTrace();
            
        }
 catch (InvalidRecordIDException e) {
            
            e.printStackTrace();
            
        }
 catch (RecordStoreException e) {
            
            e.printStackTrace();
            
        }

        
    }

    
    
public static void deleteRecrodStore(){
        
        closeRMS();
        
        
try {
            
            RecordStore.deleteRecordStore(RMS_NAME1);
            
        }
 catch (RecordStoreNotFoundException e) {
            
            e.printStackTrace();
            
        }
 catch (RecordStoreException e) {
            
            e.printStackTrace();
            
        }

        
    }

    
    
public static boolean isEmpty(){
        
        
try {
            
            
if(rec.getNumRecords() == 0)
                
                
return true;
            
        }
 catch (RecordStoreNotOpenException e) {
            
            e.printStackTrace();
            
        }

        
        
return false;
        
    }

    
    
    
// --------------------------------------------------------------------------------------------------------
    
    
    
public static byte getByte(int index){
        
        
if(index >= dataList.size()){
            
            
return 0;
            
        }

        
        
switch(dataList.elementAt(index)){
        
        
case DATA_BYTE:
            
            
return ((Byte)data.elementAt(index)).byteValue();
            
        }

        
        
return 0;
        
    }

    
    
public static short getShort(int index){
        
        
if(index >= dataList.size()){
            
            
return 0;
            
        }

        
        
switch(dataList.elementAt(index)){
        
        
case DATA_SHORT:
            
            
return ((Short)data.elementAt(index)).shortValue();
            
        }

        
        
return 0;
        
    }

    
    
public static int getInt(int index){
        
        
if(index >= dataList.size()){
            
            
return 0;
            
        }

        
        
switch(dataList.elementAt(index)){
        
        
case DATA_INT:
            
            
return ((Integer)data.elementAt(index)).intValue();
            
        }

        
        
return 0;
        
    }

    
    
    
public static boolean getBoolean(int index){
        
        
if(index >= dataList.size()){
            
            
return false;
            
        }

        
        
switch(dataList.elementAt(index)){
        
        
case DATA_BOOLEAN:
            
            
return ((Boolean)data.elementAt(index)).booleanValue();
            
        }

        
        
return false;
        
    }

    
    
    
public static char getChar(int index){
        
        
if(index >= dataList.size()){
            
            
return ' ';
            
        }

        
        
switch(dataList.elementAt(index)){
        
        
case DATA_CHAR:
            
            
return ((Character)data.elementAt(index)).charValue();
            
        }

        
        
return ' ';
        
    }

    
    
public static String getString(int index){
        
        
if(index >= dataList.size()){
            
            
return "";
            
        }

        
        
switch(dataList.elementAt(index)){
        
        
case DATA_STRING:
            
            
return (String)data.elementAt(index);
            
        }

        
        
return "";
    }

    
    
public static int[] getIntArray(int index){
        
        
if(index >= dataList.size()){
            
            
return new int[1];
            
        }

        
        
switch(dataList.elementAt(index)){
        
        
case DATA_INT_ARRAY:
            
            
return (int[])data.elementAt(index);
            
        }

        
        
return new int[1];
    }

    
    
public static byte[] getByteArray(int index){
        
        
if(index >= dataList.size()){
            
            
return new byte[1];
            
        }

        
        
switch(dataList.elementAt(index)){
        
        
case DATA_BYTE_ARRAY:
            
            
return (byte[])data.elementAt(index);
            
        }

        
        
return new byte[1];
    }

    
    
public static short[] getShortArray(int index){
        
        
if(index >= dataList.size()){
            
            
return new short[1];
            
        }

        
        
switch(dataList.elementAt(index)){
        
        
case DATA_SHORT_ARRAY:
            
            
return (short[])data.elementAt(index);
            
        }

        
        
return new short[1];
    }

    
    
    
public static boolean[] getBooleanArray(int index){
        
        
if(index >= dataList.size()){
            
            
return new boolean[1];
            
        }

        
        
switch(dataList.elementAt(index)){
        
        
case DATA_BOOLEAN_ARRAY:
            
            
return (boolean[])data.elementAt(index);
            
        }

        
        
return new boolean[1];
    }

    
    
public static char[] getCharArray(int index){
        
        
if(index >= dataList.size()){
            
            
return new char[1];
            
        }

        
        
switch(dataList.elementAt(index)){
        
        
case DATA_CHAR_ARRAY:
            
            
return (char[])data.elementAt(index);
            
        }

        
        
return new char[1];
    }

    
    
public static String[] getStringArray(int index){
        
        
if(index >= dataList.size()){
            
            
return new String[1];
            
        }

        
        
switch(dataList.elementAt(index)){
        
        
case DATA_STRING_ARRAY:
            
            
return (String[])data.elementAt(index);
            
        }

        
        
return new String[1];
    }

    
}





posted on 2010-05-30 16:25 colonleado 阅读(1714) 评论(0)  编辑  收藏 所属分类: J2me


只有注册用户登录后才能发表评论。


网站导航: