Дамп одного массива Double и двух массивов Long в ByteBuffer в Java - PullRequest
2 голосов
/ 03 августа 2011

Я хочу сбросить один двойной массив и два длинных массива в байтовый буфер. Я мог бы использовать цикл и сделать

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 Ответ

2 голосов
/ 07 августа 2011

Если вы действительно хотите «массово выгружать» данные, а не чередовать их каким-либо образом, зависящим от приложения, то вы можете создать LongBuffer и DoubleBuffer представления в вашем ByteBuffer.Общая процедура выглядит следующим образом:

  1. Вызовите position(), чтобы установить позицию буфера в том месте, где вы хотите хранить массив (вам придется рассчитывать это на основе размера примитивов).
  2. Вызовите slice() в буфере, чтобы создать новый буфер, который совместно использует резервное хранилище, но смещено.
  3. Вызовите asLongBuffer() или asDouble() буфер в новом буфере.
  4. Вызовите массовый метод put() в буфере, созданном на шаге 3.

Этот процесс удобен, не - повышение производительности.Если вы не говорите о десятках миллионов элементов, вы вряд ли увидите какое-либо улучшение вообще, и даже тогда вы, вероятно, смотрите на микросекунды.

...