2

我想将一个 Double 数组和两个 Long 数组转储到一个字节缓冲区中。我可以使用循环并做

double[] arr1 = new double[size];
long[] arr2 = new long[size];
long[] arr3 = new long[size];
for(int i=0;i<size;i++){
    buffer.putDouble(arr1[i]);
    buffer.putLong(arr2[i]);
    buffer.putLong(arr3[i]);
}

这似乎效率不高。有没有办法拒绝倾倒它们?

4

1 回答 1

2

如果您真的想“批量转储”数据,而不是以某种依赖于应用程序的方式交错,那么您可以创建LongBufferDoubleBuffer查看您的ByteBuffer. 一般程序如下:

  1. 调用position()以将缓冲区的位置设置为您想要存储数组的任何位置(您必须根据基元的大小来计算它)。
  2. 调用slice()缓冲区以创建一个共享后备存储但偏移的新缓冲区。
  3. 在新缓冲区上调用asLongBuffer()asDouble()缓冲。
  4. put()在步骤 3 中创建的缓冲区上调用 bulk方法。

这个过程是一种方便,而不是性能增强。除非您谈论的是数千万个元素,否则您根本看不到任何改进,即使那样,您也可能会看到微秒。

于 2011-08-07T12:29:36.480 回答