选择显示字体大小

java进阶篇:rms从入门到精通系列二

在介绍如何使用record management system之前,我想首先介绍一下java io以及在j2me平台实现序列化的内容,无论对record management system还是midp中的通用联网框架来说,上述内容都是非常重要的。 

在cldc中定义的java io是非常短小精悍的,但是也提供了足够的类来完成我们的io操作。由于和j2se的实现是通用的,因此你可以使用j2mej2se或者j2ee平台进行通信。 

比如通过联网和servlet进行通信。在record management system中我们主要使用的类是bytearrayinputstream、bytearrayoutputstream、datainputstream和dataoutputstream。 

前面两个是基于字节的,bytearrayinputstream的作用是把字节数组转换成流而bytearrayoutputstream的作用是把内存缓冲区内的数据转换成字节。后面两个类是基于java基本数据类型和string操作的。 

通常他们把前面两个类作为参数传送给构造器,这样他们就可以对基本数据类型以及string进行读写操作了。值得注意的一点是bytearrayoutputstream的tobytearray()方法是把内存中的数据进行复制返回,这样的话多浪费了一份内存,为了更有效的使用有限的存储空间你可以扩展bytearrayoutputsteam类然后提供getbytearray()方法,下面是例子: 


public class mybytearrayoutputstream  
extends bytearrayoutputstream 
{ 
  public byte[] getbytearray() 
  { 
    return buf;  
  }  
} 
  



j2me中并没有提供对象序列化的机制,但是我们可以自己实现它。请考虑下面这个类:  


public class bank 
{ 
 private string bankname; 
 private string phone; 
 private int employeenum; 
  
 public bank(){} 
  
 public bank(string abankname, 
 string aphone,int aemployeenum) 
 { 
  this.bankname = abankname; 
  this.phone = aphone; 
  this.employeenum = aemployeenum;  
 }  
  
 public string getbankname() 
 { 
  return bankname !=null?bankname:"";  
 } 
  
 public string getphone() 
 { 
  return phone!=null?phone:"";  
 } 
  
 public int getemployeenum() 
 { 
  return employeenum;  
 } 

} 
  



我们添加两个方法到这个类来实现对象序列化。如下所示:  


public class bank 
{ 
 private string bankname; 
 private string phone; 
 private int employeenum; 
  
 public bank(){} 
  
 public bank(string abankname, 
 string aphone,int aemployeenum) 
 { 
  this.bankname = abankname; 
  this.phone = aphone; 
  this.employeenum = aemployeenum;  
 }  
  
 public string getbankname() 
 { 
  return bankname !=null?bankname:"";  
 } 
  
 public string getphone() 
 { 
  return phone!=null?phone:"";  
 } 
  
 public int getemployeenum() 
 { 
  return employeenum;  
 } 
  
 public byte[] serialize() 
 throws ioexception 
 { 
  bytearrayoutputstream bos = 
  new bytearrayoutputstream(); 
  dataoutputstream dos = 
  new dataoutputstream(bos); 
   
  dos.writeutf(getbankname()); 
  dos.writeutf(getphone()); 
  dos.writeint(getemployeenum()); 
  dos.flush(); 
   
  return bos.tobytearray();  
 } 
  
 public bank deserialize 
 (byte[] data) throws ioexception 
 { 
  bytearrayinputstream bis =  
  new bytearrayinputstream(data); 
  datainputstream dis = 
  new datainputstream(bis); 
   
  bank mybank = new bank(); 
  mybank.bankname = dis.readutf(); 
  mybank.phone = dis.readutf(); 
  mybank.employeenum = dis.readint(); 
   
  return mybank;  
 } 
} 
  



这样我们就实现了对象的序列化,使用起来也非常简单。序列化和反序列化的操作分别如下面所示:  


bank abank = .....; 
recordstore rs = .....; 
try 
{ 
 byte[] data = abank.serialize(); 
 rs.addrecord(data,0,data.length);  
} 

catch(ioexception e) 
{ 
 //do something  
} 

catch(recordstoreexception e) 
{ 
 //do something  
} 


byte[] data = ..........; 
bank abank = null; 
try 
{ 
 abank = bank.deserialize(data);  
} 
catch(ioexception e) 
{ 
  
} 
  



值得注意的一点是在bank类中我们的成员都是基本数据类型以及string类型,并不存在指向其他对象的引用,这是最理想也是最简单的情况,事实上我们在j2me中设计序列化的类的时候也应该尽量这样做,避免不必要得麻烦。  


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons