Не удалось поместить байты в DirectByteBuffer в scala

#java #scala #memory

Вопрос:

Недавно я столкнулся с проблемой при использовании DirectByteBuffer в коде scala. Ниже приведен мой код.

 def byteBuffer = ByteBuffer.allocateDirect(10 * 4)

    for (i <- 0 until 10) {
      println(s"Remaining: ${byteBuffer.remaining()}") // Always return 40
      byteBuffer.putFloat(1) // Also tried byteBuffer.putFloat(i, 1) to try to put it to specific index, still nothing changed.
    }

    byteBuffer.position(0) // With or without this line, result doesn't change

    for (i <- 0 until 40) {
      println(s"At index=$i, get=${byteBuffer.get()}") // Always 0
      println(byteBuffer.remaining()) // Always 40
    }
 

Для всего цикла ByteBuffer.remaining() всегда возвращает 40, что, похоже, вызовы «put()» никогда не работали. В результате, содержимое при выполнении «get ()» содержимое буфера всегда равно 0.

Даже вызов get() вообще не перемещает индекс.

Задавался вопросом, почему он не пишет в директ-буфер?

При использовании HeapBuffer использование будет генерировать правильное поведение, только не DirectBuffer.

Ответ №1:

Ваш byteBuffer определяется как def , это метод: каждый раз, когда вы звоните byteBuffer , вы получаете новый буфер.

Вы, наверное, хотите сменить его на a val ?

Комментарии:

1. Огромное вам спасибо, не могу поверить, что потратила на это столько времени. Это на самом деле спасло мне жизнь.