无法将字节放入 scala 中的 DirectByteBuffer

Unable to put bytes to DirectByteBuffer in scala

我最近在 Scala 代码中使用 DirectByteBuffer 时遇到了问题。下面是我的代码。

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() 总是 returns 40,这似乎“put()”调用从未起作用。结果,get()时的内容,buffer的内容总是0。

即使调用 get() 也根本不会移动索引。

想知道它不写入 directBuffer 的原因吗?

使用 HeapBuffer 时,使用会产生正确的行为,而不是 DirectBuffer。

你的 byteBuffer 被定义为一个 def,这是一个方法:每次你调用 byteBuffer 你都会得到一个新的缓冲区。

您可能想将其更改为 val?