在Java中将一个Double数组和两个Long数组转储到ByteBuffer中

时间:2011-08-03 16:40:37

标签: java arrays bytebuffer

我想将一个Double数组和两个Long数组转储到bytebuffer中。我可以使用循环并执行

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]);
}

这看起来效率不高。有没有办法拒绝抛弃它们?

1 个答案:

答案 0 :(得分:2)

如果您真的想“批量转储”数据,而不是以某种依赖于应用程序的方式对其进行交错,那么您可以在LongBuffer中创建DoubleBufferByteBuffer个视图。一般程序如下:

  1. 调用position()将缓冲区的位置设置为您想要存储数组的位置(您必须根据基元的大小来计算)。
  2. 在缓冲区上调用slice()以创建一个共享后备存储但是已偏移的新缓冲区。
  3. 在新缓冲区上调用asLongBuffer()asDouble()缓冲区。
  4. 在步骤3中创建的缓冲区上调用批量put()方法。
  5. 此过程非常方便,性能增强。除非你谈论数以千万计的元素,否则你根本不可能看到任何改进,即便如此,你可能会看到微秒。