网站风格: 红 | 蓝
搜索:  全站?
首页 |  Java开发 |  DOTNET开发 |  PHP开发 |  ASP技术 |  Web开发 |  数据库应用 |  网络文摘 |  作品集 |  下载 |  留言
文章聚合
  J2EE  |   框架技术  |   Javascript  |   AJAX  |   J2ee Server  |   J2ME  |
  WinForm开发  |   Asp.net  |   C#语言  |   服务器  |   第三方控件  |
  PHP笔记  |   Linux  |   第三方代码  |
  ASP教程  |   ASP实用代码  |   ASP笔记  |   服务器  |
  CSS样式表  |   Photoshop设计  |   Flash  |   HTML 小技巧  |   Dreamweaver  |   XML技术  |
  SQL Server  |   Oracle  |   MySQL  |
  散文  |   幽默  |   杂文  |
  Web 项目  |   杂七杂八  |
  第三方代码  |   实用工具  |   作品下载  |   帮助文档  |
奇点网 - Java开发 - J2ME - J2me中利用RMS对对象进行序列化与持久化操作
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;

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;

public class RMS4Obj extends MIDlet {

 private RecordStore rs;
 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

().length);
   rs.addRecord(stu2.student2ByteArray(), 0, stu2.student2ByteArray

().length); 
   
   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

 }

 protected void pauseApp() {
  // 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);  //通过字节流创建数据流

  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); //将数据输出到流

中
  DataInputStream dis = new DataInputStream(bais);  //再将流构造成数据输入流
  
  //注: 以下的数据流读取顺序必需与写入流时的顺序一致,即FIFO的方式进行读取,

否则将会出现IO异常无法读取
  stu.setId(dis.readInt());
  stu.setName(dis.readUTF());
  stu.setSex(dis.readBoolean());
  
  return stu;
 }
}
标签:   J2ME  |  手机  |  笔记  |  代码  |
留言 | 链接 | 标签 | 风格: 红 蓝   
Copyright © 2005 奇点中文网--7dit.com
闽ICP备05001292号