Как преобразовать IntBuffer в ByteBuffer без копирования данных
Мой код Scala/Java имеет большие (несколько сотен мегабайт) целочисленные массивы. Я бы отправил их как можно быстрее (без копирования содержимого) из этогоint[]
с помощью java.nio
. Кроме того, когда я получаю какие-либо данные о моемnio
каналы сокетов, я бы использовал данные как int[]
без копирования.
Все nio
операции требуют ByteBuffer
, пока ByteBuffer
можно только обернуть byte[]
.
Я могу выделить ByteBuffer
, затем поместите мой массив, используя asIntBuffer
, но он скопирует случайный массив, и мне придется дважды сохранить свои данные.
val size = 1234
val random = Array.fill[Int](size) { scala.util.Random.nextInt(1000) }
val buf = ByteBuffer.allocate(4 * size)
buf
.asIntBuffer()
.put(random)
Я использую проект panama openjdk, поэтому любой новый трюк (например, использование Pointer<>
) может мне помочь.
TL; DR: в Java или Scala, как получить доступ к моему целочисленному массиву какByteBuffer
а также int[]
.