我想将一个 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]);
}
这看起来效率不高。有什么办法可以阻止转储它们吗?
最佳答案
如果你真的想“批量转储”数据,而不是以某种依赖于应用程序的方式交错,那么你可以创建 LongBuffer
和 DoubleBuffer
View 到你的字节缓冲区
。一般流程如下:
- 调用
position()
将缓冲区的位置设置为您要存储数组的位置(您必须根据图元的大小来计算)。 - 在缓冲区上调用
slice()
以创建共享后备存储但有偏移的新缓冲区。 - 在新缓冲区上调用
asLongBuffer()
或asDouble()
缓冲区。 - 对步骤 3 中创建的缓冲区调用批量
put()
方法。
这个过程是为了方便,不是性能增强。除非您谈论的是数千万个元素,否则您根本不可能看到任何改进,即使那样您也可能正在查看微秒。
关于java - Java中将一个Double数组和两个Long数组转储到ByteBuffer中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6930004/