Использование обычных массивов может быть неэффективным, так как виртуальная машина может копировать массив при передаче его в собственный код, а также может использовать промежуточную память во время ввода-вывода.
Для самого быстрого ввода-вывода используйте ByteBuffer.allocateDirect для выделения байтового буфера. Базовый массив является «особенным» в том смысле, что он не является частью обычной кучи JVM. Собственный код и ввод / вывод могут обращаться к массиву напрямую.
Чтобы прочитать данные в буфер, используйте
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(randomAccessFile.length());
RandomAccessFile.getChannel().read(byteBuffer, 0);
Чтобы получить массив поддержки для передачи в JNI, используйте
byte[] byteArray = byteBuffer.array();
Затем вы можете передать этот массив и длину файла в JNI.
Прямые буферы создавать очень тяжело, так как все ваши файлы занимают 1 МБ (или около того), вы должны иметь возможность повторно использовать один и тот же буфер в нескольких файлах.
Надеюсь, это поможет!