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

标签 java arrays bytebuffer

我想将一个 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]);
}

这看起来效率不高。有什么办法可以阻止转储它们吗?

最佳答案

如果你真的想“批量转储”数据,而不是以某种依赖于应用程序的方式交错,那么你可以创建 LongBufferDoubleBuffer View 到你的字节缓冲区。一般流程如下:

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

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

关于java - Java中将一个Double数组和两个Long数组转储到ByteBuffer中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6930004/

相关文章:

hadoop - Haddop MRUnit MapDriver.addInput()给出NotSerializableException:java.nio.HeapByteBuffer错误

java - JasperReports 打印空 PDF

java - Path JobQueue 无法序列化 String HashSet

arrays - 如何使用 sed 将模式替换为整个数组?

c - 为什么指针和数组不一样: Need justification on quote

ios - Swift 4 中的 Java ByteBuffer 等效项

java - mappingsize 或 limit 如何影响 MappedByteBuffer 性能?

java - 我们需要在 Eclipse 中将 System.getProperty 的值传递到哪里

java - 使用 Bouncy CaSTLe 和 Node.js 加密时的不同结果

c - WIN32和其他c字符串的区别