【问题标题】:Converting all objects in arraylist to byte array in java将arraylist中的所有对象转换为java中的字节数组
【发布时间】:2015-05-13 22:27:19
【问题描述】:

我有一个 ArrayList,其中的数据是我自己的自定义对象,我需要将它们全部转换为字节数组。我可以通过序列化将对象转换为字节数组,但我需要将所有对象序列化为一个数组。

ArrayList<MyObject> myArrayList = new ArrayList<MyObject>();
// Getting a list of objects of database (any unknown number)
for(int counter = 0; counter < myObj.size(); counter++) {
    byte[] myData = serialize(myObj.get(counter));
}

现在我如何对多个对象执行此操作,因为我不知道字节数组缓冲区初始化的长度?

【问题讨论】:

  • 你不能序列化数组列表本身吗?

标签: java android arrays serialization arraylist


【解决方案1】:

如果您真的希望将其转换为单个字节 [],请使用 ByteArrayOutputStream 并根据需要调用相应的函数。

虽然你还需要考虑再次把这个 byte[] 变成一个合适的 List。

【讨论】:

  • 我只需要字节数组,因为我需要将该数据发送到 ble 设备。
  • 给定的类甚至可以直接写入给定的输出流,使其平滑集成 - 或者您可以直接将数据写入输出流,而根本不需要将它们设为单字节数组。
【解决方案2】:

预分配一个数组

byte[][] data = new byte[myObj.size()][];
long size = 0;

生成字节

for(int counter = 0; counter < myObj.size(); counter++) {
    data[counter] = serialize(myObj.get(counter));
    size += data[counter].length;
}

连接到最终缓冲区“allData”:

byte[] allData = new byte[size];
long curs = 0;
for(int i = 0; i < data.length; i++) {
    int length = data[i].length;
    System.arraycopy(data[i], 0, allData, curs, length);
    curs += length;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2018-09-08
    • 2018-02-14
    相关资源
    最近更新 更多