J2me中利用RMS对对象进行序列化与持久化操作
来源:http://www.7dit.com 作者:7dit 发布日期:2008-10-04 17:59:51 点击量:206
package demo;
/**
* 当要存储的数据为一个复合型数据,如结构或对象时,要存储数据就要转换为相应的byte[]类型
* 这就是序列化, J2Me中并没有相关进行对象序列化的类, 因此该工作需要我们手动完成
* 使用到的相关类
* ByteArrayInputStream ByteArrayOutputStream
* DataInputStream DataOutputStream
* 即字节数组的流与数据流
*
* 步骤:在类中定义两个序列化与反序列的方法,在RS存储时进行调用
*/
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
/**
* 当要存储的数据为一个复合型数据,如结构或对象时,要存储数据就要转换为相应的byte[]类型
* 这就是序列化, J2Me中并没有相关进行对象序列化的类, 因此该工作需要我们手动完成
* 使用到的相关类
* ByteArrayInputStream ByteArrayOutputStream
* DataInputStream DataOutputStream
* 即字节数组的流与数据流
*
* 步骤:在类中定义两个序列化与反序列的方法,在RS存储时进行调用
*/
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;
public class RMS4Obj extends MIDlet {
private RecordStore rs;
public RMS4Obj() {
try {
rs = RecordStore.openRecordStore("mydb", true);
} catch (Exception e) {
e.printStackTrace();
}
}
public RMS4Obj() {
try {
rs = RecordStore.openRecordStore("mydb", true);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void startApp() throws MIDletStateChangeException {
Student stu1 = new Student();
stu1.setId(1); stu1.setName("张三"); stu1.setSex(true);
Student stu2 = new Student();
stu2.setId(2); stu2.setName("张四"); stu2.setSex(false);
try {
rs.addRecord(stu1.student2ByteArray(), 0, stu1.student2ByteArray
Student stu1 = new Student();
stu1.setId(1); stu1.setName("张三"); stu1.setSex(true);
Student stu2 = new Student();
stu2.setId(2); stu2.setName("张四"); stu2.setSex(false);
try {
rs.addRecord(stu1.student2ByteArray(), 0, stu1.student2ByteArray
().length);
rs.addRecord(stu2.student2ByteArray(), 0, stu2.student2ByteArray
rs.addRecord(stu2.student2ByteArray(), 0, stu2.student2ByteArray
().length);
Student stu3 = Student.byteArray2Student(rs.getRecord(2));
System.out.println(stu3.getId()+" "+stu3.getName()+" "+stu3.isSex
Student stu3 = Student.byteArray2Student(rs.getRecord(2));
System.out.println(stu3.getId()+" "+stu3.getName()+" "+stu3.isSex
());
} catch (Exception e) {
e.printStackTrace();
}
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
} catch (Exception e) {
e.printStackTrace();
}
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
protected void pauseApp() {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
}
}
class Student{ //自定义的实体类
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
private int id;
private String name;
private boolean sex;
public byte[] student2ByteArray() throws Exception//将对象序列化为二进制数组的方法
{
ByteArrayOutputStream baos = new ByteArrayOutputStream(); //建立字节输出流
DataOutputStream dos = new DataOutputStream(baos); //通过字节流创建数据流
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
private int id;
private String name;
private boolean sex;
public byte[] student2ByteArray() throws Exception//将对象序列化为二进制数组的方法
{
ByteArrayOutputStream baos = new ByteArrayOutputStream(); //建立字节输出流
DataOutputStream dos = new DataOutputStream(baos); //通过字节流创建数据流
dos.writeInt(this.id);
dos.writeUTF(this.name);
dos.writeBoolean(this.sex);
byte[] result = baos.toByteArray();
dos.close();
baos.close();
return result;
}
public static Student byteArray2Student(byte[] data) throws Exception
{
Student stu = new Student();
ByteArrayInputStream bais = new ByteArrayInputStream(data); //将数据输出到流
dos.writeUTF(this.name);
dos.writeBoolean(this.sex);
byte[] result = baos.toByteArray();
dos.close();
baos.close();
return result;
}
public static Student byteArray2Student(byte[] data) throws Exception
{
Student stu = new Student();
ByteArrayInputStream bais = new ByteArrayInputStream(data); //将数据输出到流
中
DataInputStream dis = new DataInputStream(bais); //再将流构造成数据输入流
//注: 以下的数据流读取顺序必需与写入流时的顺序一致,即FIFO的方式进行读取,
DataInputStream dis = new DataInputStream(bais); //再将流构造成数据输入流
//注: 以下的数据流读取顺序必需与写入流时的顺序一致,即FIFO的方式进行读取,
否则将会出现IO异常无法读取
stu.setId(dis.readInt());
stu.setName(dis.readUTF());
stu.setSex(dis.readBoolean());
return stu;
}
}
stu.setId(dis.readInt());
stu.setName(dis.readUTF());
stu.setSex(dis.readBoolean());
return stu;
}
}
Copyright © 2005 奇点中文网--7dit.com
闽ICP备05001292号
闽ICP备05001292号
