是否可以在RecordStore的列中写入一个byte[]?例如,我想编写一条记录,其中第一列包含 byte[],第二列包含 String,第三列包含 int。
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){}
}
最佳答案
当然。写出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
值来指示字符串长度,然后写入字符数组。
关于java - 将 byte[] 写入 RMS 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15220869/