Как преобразовать 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[].

0 ответов

Другие вопросы по тегам