【发布时间】:2021-11-23 16:10:25
【问题描述】:
我最近遇到了在 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() 总是返回 40,这看起来像“put()”调用从来没有工作过。结果,在做“get()”时,缓冲区的内容总是0。
即使 get() 调用根本不会移动索引。
想知道为什么它没有写入 directBuffer 吗?
当使用 HeapBuffer 时,使用会产生正确的行为,而不是 DirectBuffer。
【问题讨论】: