java - 将 byte[] 写入 RMS 列

标签 java java-me arrays rms

是否可以在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/

相关文章:

java - 如何使用 JUnit 中的规则访问测试类的字段

java - 以文本文件形式保存到 SD 卡

java - 黑莓 Java 运行时缺少一点?

java - J2ME 适用于诺基亚 S60 5 号 : bluetooth serial API

大小未知时的java 2d数组

Javascript - 在数组中查找 2 个项目?

java - Android 中的 SuperNotCalledException?

java - android.view.InflateException : Binary XML file line #29: Error inflating class android. widget.Button

java - J2ME Https 连接不工作

Javascript 检查数组的元素