在系列之一中,我們著重講述了Record Management System的基礎(chǔ)知識。在介紹如何使用Record Management System之前,我想首先介紹一下java IO以及在J2ME平臺實現(xiàn)序列化的內(nèi)容,無論對Record Management System還是MIDP中的通用聯(lián)網(wǎng)框架來說,上述內(nèi)容都是非常重要的。 在CLDC中定義的Java IO是非常短小精悍的,但是也提供了足夠的類來完成我們的IO操作。由于和J2SE的實現(xiàn)是通用的,因此你可以使用J2ME和J2SE或者J2EE平臺進行通信。比如通過聯(lián)網(wǎng)和servlet進行通信。在Record Management System中我們主要使用的類是ByteArrayInputStream、ByteArrayOutputStream、DataInputStream和DataOutputStream。前面兩個是基于字節(jié)的,ByteArrayInputStream的作用是把字節(jié)數(shù)組轉(zhuǎn)換成流而ByteArrayOutputStream的作用是把內(nèi)存緩沖區(qū)內(nèi)的數(shù)據(jù)轉(zhuǎn)換成字節(jié)。后面兩個類是基于java基本數(shù)據(jù)類型和String操作的。通常他們把前面兩個類作為參數(shù)傳送給構(gòu)造器,這樣他們就可以對基本數(shù)據(jù)類型以及String進行讀寫操作了。值得注重的一點是ByteArrayOutputStream的toByteArray()方法是把內(nèi)存中的數(shù)據(jù)進行復制返回,這樣的話多浪費了一份內(nèi)存,為了更有效的使用有限的存儲空間你可以擴展ByteArrayOutputSteam類然后提供getByteArray()方法,下面是例子: public class MyByteArrayOutputStream extends ByteArrayOutputStream { ........... ...........
public byte[] getByteArray() { return buf; } }
在J2ME中并沒有提供對象序列化的機制,但是我們可以自己實現(xiàn)它。請考慮下面這個類: //Bank.java public class Bank { PRivate String bankName; private String phone; private int employeeNum;
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);
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();