为什么我得到java.nio.BufferOverflowException

dav*_*vid 1 java exception buffer-overflow

我试图创建一个简单的程序只是为了好玩,但我得到一个BufferOverflowException:

ByteBuffer byteBuffer = ByteBuffer.allocateDirect(10);
FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();
floatBuffer.put(new float[] {1, 0, 0});
Run Code Online (Sandbox Code Playgroud)

可能有什么不对?

Aur*_*ere 12

当你使用时ByteBuffer.allocateDirect(10);,要求分配10个字节的内存.然后你将3 float放入缓冲区.根据官方文档,每个浮点数使用4个字节的内存.所以你使用12个字节,因此溢出.

要解决这个问题,只需使用12个字节而不是10个字节.