Java Can';t将FloatBuffer转换为float[](不支持操作异常)

Java Can';t将FloatBuffer转换为float[](不支持操作异常),java,arrays,buffer,Java,Arrays,Buffer,实际上,我正在编写一个立方体网格,在超级方法中,我需要传递立方体顶点,这是一个float[],但我想以一种“人性化的方式”这样做,所以我做到了: private static FloatBuffer texts=MemoryUtil.memAllocFloat(72); 私有静态最终浮点[]A={0,0,0},B={0,1,0},C={1,1,0},D={1,0,0},E={0,0,0},F={0,1,0},G={1,1,0},H={1,0,0}//顶点 公共类MyClass扩展了MyMeshC

实际上,我正在编写一个立方体网格,在超级方法中,我需要传递立方体顶点,这是一个float[],但我想以一种“人性化的方式”这样做,所以我做到了:

private static FloatBuffer texts=MemoryUtil.memAllocFloat(72);
私有静态最终浮点[]A={0,0,0},B={0,1,0},C={1,1,0},D={1,0,0},E={0,0,0},F={0,1,0},G={1,1,0},H={1,0,0}//顶点
公共类MyClass扩展了MyMeshClass
{
公共MyClass()
{
超级(
顶点
//正面
放,放,放,放,放,放,放
//背
放(E)、放(F)、放(G)、放(H)
//对
放(D)、放(C)、放(G)、放(H)
//左
放(一)放(二)放(六)放(五)
//顶
放(B)放(F)放(G)放(C)
//底部
.put(A).put(E).put(H).put(D).array(),
在这里做其他很酷的事情);
}
}
但在转换为数组时,我最终遇到了一个不受支持的操作异常,所以我尝试了不同的方法,将FloatBuffer转换为数组,如下所示

publicstaticfloat[]toArray(FloatBuffer)
{
float[]数组=新的float[buffer.limit()];
get(数组);
返回数组;
}
但是我在get(数组)上得到了一个BufferUnderflowException


有人知道它为什么不起作用吗?

你是这样试的吗

FloatBuffer buf = FloatBuffer.allocate(10);
buf.put(1f).put(2f).put(3f).put(new float[]{4,5,6});
System.out.println(Arrays.toString(buf.array()));
印刷品

[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 0.0, 0.0, 0.0, 0.0]

根据javadoc for
Buffer.array()
如果缓冲区未由可访问数组支持,则将抛出UnsupportedOperationException

这种情况会发生,即当缓冲区使用分配给本机内存而不是JVM堆的数组时。由于LWJGL的
MemoryUtil.memAllocFloat
是为opengl优化的,我猜它使用了本机内存,因此在这样的缓冲区上调用的
array()
方法失败了

若你们想在堆中分配缓冲区,你们可以使用

        FloatBuffer vertices = FloatBuffer.allocate(72);


非常感谢你!实际上,我没有注意到memAllocFloat来自LWJGL,您的解决方案很棒
        FloatBuffer vertices = FloatBuffer.wrap(new float[72]);
``