为什么我得到一个java.nio.BufferOverflowException

为什么我得到一个java.nio.BufferOverflowException,java,exception,buffer-overflow,Java,Exception,Buffer Overflow,我试图创建一个简单的程序只是为了好玩,但我得到了一个BufferOverflowException: ByteBuffer byteBuffer = ByteBuffer.allocateDirect(10); FloatBuffer floatBuffer = byteBuffer.asFloatBuffer(); floatBuffer.put(new float[] {1, 0, 0}); 有什么问题吗?当您使用ByteBuffer.allocateDirect(10)时您要求分配10字

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

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

有什么问题吗?

当您使用ByteBuffer.allocateDirect(10)时您要求分配10字节的内存。然后将3
float
放入该缓冲区。每个浮点使用4个字节的内存。因此,您使用的是12个字节,因此溢出


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

当您使用ByteBuffer.allocateDirect(10)时您要求分配10字节的内存。然后将3
float
放入该缓冲区。每个浮点使用4个字节的内存。因此,您使用的是12个字节,因此溢出

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