2013-03-05 48 views
1

是否可以在RecordStore的列中寫入byte []?例如,我想寫一條記錄,它包含第一列中的byte [],第二列中的字符串和第三列中的int。在RMS列中寫入byte []

public void writeToRms(byte[] byteArray){ 
    RecordStore recordStore = RecordStore.openRecordStore("My recordStore", true); 
    try{ 
     byte[] outputRecord; 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     DataOutputStream dos = new DataOutputStream(baos); 
     // i want to write the parameter **byteArray** here. What method should I use? 
     dos.writeUTF("Name"); 
     dos.writeInt(ctr); 
     dos.flush(); 
     outputRecord = baos.toByteArray(); 
     recordStore.addRecord(outputRecord, 0, outputRecord.length); 
     recordStore.closeRecordStore(); 
     baos.reset(); 
     baos.close(); 
     dos.close(); 
    }catch(Exception e){} 
} 

回答

1

當然可以。基本的代碼寫出來的byte[]是這樣的:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    DataOutputStream dos = new DataOutputStream(baos); 

    // i want to write **byteArray** here. What method should I use? 
    dos.writeShort(byteArray.length); 
    dos.write(byteArray); 

    dos.writeUTF("Name"); 
    dos.writeInt(ctr); 
    dos.flush(); 
    outputRecord = baos.toByteArray(); 

,然後當你閱讀他們回來再次,您必須首先閱讀數組的長度,然後數組。就像這樣:

RecordStore recordStore = RecordStore.openRecordStore("My recordStore", false); 
    RecordEnumeration records = recordStore.enumerateRecords(null, null, true); 
    while (records.hasNextElement()) { 
     byte[] recordData = records.nextRecord(); 

     ByteArrayInputStream bais = new ByteArrayInputStream(recordData); 
     DataInputStream dis = new DataInputStream(bais); 

     short arrayLength = dis.readShort(); 
     byte[] bytes = new byte[arrayLength]; 
     dis.read(bytes, 0, arrayLength); 

我覺得有一個good RMS example from BlackBerry here ...看看CD.java。我知道這是一個普通的J2ME問題,但我不認爲BlackBerry在這裏使用了任何RIM特定的庫......它只是標準的J2ME。

注意:這種通用技術適用於任何種類的陣列,而不僅僅是byte[]。爲了將它保存到唱片店,你首先寫出一個short,表示數組有多長,然後你自己寫出數組。當你讀回來時,你首先讀取一個簡短的值,告訴你有多少個數組元素,然後讀入數組,知道應該有多長。

這實際上是RMS本身如何使用readUTF()writeUTF()讀取和寫入字符串。它會寫入一個2字節的short值,指示字符串長度,然後寫入字符數組。

+0

感謝您的回覆。我編輯了我的問題,我正在討論將參數byteArray(這是一個字節[])作爲列之一寫入Rms。 – 2013-03-06 03:14:38

+0

這就是我給你看的。您將參數的**名稱**從'myRecord'更改爲'byteArray'。這並沒有真正改變解決方案。 – Nate 2013-03-06 03:20:26

+0

我改變了名字,使其更容易理解。我很抱歉,我以爲你讀了我的問題,就像昨天試圖回答我的問題的其他人一樣。 – 2013-03-06 03:21:40

0

明白了,另一個解決方案。如果我想在其中一列中寫入byte[],我需要做的就是首先將byte[]編碼爲一個字符串。 Base64具體然後將String寫入RMS。

public void writeToRms(byte[] byteArray){ 
    RecordStore recordStore = RecordStore.openRecordStore("My recordStore", true); 
    try{ 
     byte[] outputRecord; 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     DataOutputStream dos = new DataOutputStream(baos); 
     String encoded = Base64.encode(byteArray); 
     dos.writeUTF(encoded); 
     dos.writeUTF("Name"); 
     dos.writeInt(ctr); 
     dos.flush(); 
     outputRecord = baos.toByteArray(); 
     recordStore.addRecord(outputRecord, 0, outputRecord.length); 
     recordStore.closeRecordStore(); 
     baos.reset(); 
     baos.close(); 
     dos.close(); 
    }catch(Exception e){} 
} 

當我找回我只需要編碼的解碼Stringbyte[]

+0

這將工作正常,但正如我在我的其他評論中所說,沒有必要執行字符[]字符串編碼。 – Nate 2013-03-06 03:30:00