我正在移植一些目标 C 代码。
我需要创建一个对象列表(我将使用任何类型的列表,只要有意义)。该类如下所示:
class Foo{
double fooValue1;
double fooValue2;
double fooValue3;
double fooValue4;
}
我正在将二进制文件读入一个工作正常的字节数组。字节数组是 4 个双精度的列表。因此,如果文件中有 100 个 Foo 实例,则字节数组有 3200 个字节。即 4 * 8 * 100。
在 Objective C 中,变量被声明为指向 Foo 类型数组的指针。通过简单地复制字节来加载该数组非常快。这样做的声明是:
[byteArray getBytes:fooData range:range]
其中 range 是NSRange
位置 = 0 且长度 = 字节数组长度的实例,byteArray 是从文件中读取的原始字节 [],而 fooData 是指向目标数组的指针。
目前,我正在遍历字节数组,为每 32 个字节创建一个新的 Foo 实例,然后通过将每 8 个字节转换为双精度来分配字段。对于数千个对象,这很慢。
我的目标是 API 8,因此Arrays.copyOf
我无法使用它,但如果它提供了一个好的解决方案,我会考虑更改目标。
问题是; 有没有办法以与 Objective C 类似的“单一语句”方式创建列表?
谢谢
[编辑] 这是我根据彼得的回答使用的最终代码。我应该补充一点,该文件实际上包含一个列表列表,用标题分隔。解析文件的结果是一个字节数组。
ArrayList<SCGisPointData> pointData = new ArrayList<SCGisPointData>();
SCGisPointData thisPointdata;
for (byte[] ring : linearRings) {
DoubleBuffer buffer = ByteBuffer.wrap(ring).order(ByteOrder.nativeOrder()).asDoubleBuffer().asReadOnlyBuffer();
thisPointdata= new SCGisPointData ();
while (buffer.hasRemaining()) {
thisPointdata = new SCGisPointData();
thisPointdata.longitude = buffer.get();
thisPointdata.latitude = buffer.get();
thisPointdata.sinLatitude = buffer.get();
thisPointdata.cosLatitude = buffer.get();
pointData.add(thisPointdata);
}
}