【发布时间】:2022-01-07 09:18:46
【问题描述】:
我正在尝试将输入字节数组转换为另一个数据结构的集合。输入字节数组有很多字节对应于我称之为 Records 的数据结构,其中每个字节由 data (long) 的 8 个字节和 key (double) 的 8 个字节组成记录。我要做的是定义一个自动执行此操作的函数,因为我会非常频繁地执行此过程。这是我现在拥有的功能:
public Record[] bytesToRecord(byte[] byteArray) {
Record[] arrayRecords = new Record[(byteArray.length/16)];
for (int i = 0; i <= (byteArray.length); i+=16) {
arrayRecords[i] = new Record(Arrays.copyOfRange(byteArray, i, i + 16));
}
return arrayRecords;
}
所以正如你在上面看到的,该函数接受一个字节数组,并每隔 16 个字节循环一次以创建一个新的Record 对象并将其附加到arrayRecords,这是Records 中的集合Record 数组。我遇到的问题是我认为出了点问题,所以我的函数不是每条记录正好占用 16 个字节,所以当创建 Record 对象时,我在 Record 类中得到一个 NullPointerException,因为它无法正确切片Record 的 16 字节子数组以获取 data 和 key 的 long 和 double 值。如下有Record类构造函数:
public class Record {
private byte[] record;
long idData = ByteBuffer.wrap(Arrays.copyOfRange(record, 0,9)).getLong();
double key = ByteBuffer.wrap(Arrays.copyOfRange(record, 9,16)).getDouble();
public Record(byte[] recordArray) {
this.record = recordArray;
}
}
我希望有人可以帮助我修复此功能或建议另一种方法来做我想做的事情。
【问题讨论】:
-
如果您能提供一些输入数据和预期的输出将会非常有帮助。
标签: java arrays type-conversion