Java 在视图缓冲区上添加浮点数组不会增加位置,这正常吗?
如标题所示,此代码:Java 在视图缓冲区上添加浮点数组不会增加位置,这正常吗?,java,bytebuffer,Java,Bytebuffer,如标题所示,此代码: ByteBuffer vertexBuffer = GLBuffers.newDirectByteBuffer(3*Float.BYTES+3*Byte.BYTES); System.out.println(vertexBuffer.toString()); vertexBuffer.asFloatBuffer().put(new float[]{1,2,3}); System.out.println(vertexBuffer.toStrin
ByteBuffer vertexBuffer = GLBuffers.newDirectByteBuffer(3*Float.BYTES+3*Byte.BYTES);
System.out.println(vertexBuffer.toString());
vertexBuffer.asFloatBuffer().put(new float[]{1,2,3});
System.out.println(vertexBuffer.toString());
vertexBuffer.put(new byte[]{0,1,2});
System.out.println(vertexBuffer.toString());
打印出以下内容:
java.nio.DirectByteBuffer[pos=0 lim=15 cap=15]
java.nio.DirectByteBuffer[pos=0 lim=15 cap=15]
java.nio.DirectByteBuffer[pos=3 lim=15 cap=15]
但是,理论上,我希望视图缓冲区上的第一个put
将位置从0增加到3,第二个put
将位置从3增加到6,以便得到如下结果:
java.nio.DirectByteBuffer[pos=0 lim=15 cap=15]
java.nio.DirectByteBuffer[pos=3 lim=15 cap=15]
java.nio.DirectByteBuffer[pos=6 lim=15 cap=15]
api文件说:
公共最终FloatBuffer put(float[]src)相对批量put
方法(可选操作)。此方法传输整个内容
将给定源浮点数组的。援引
这种形式为dst.put(a)的方法的行为方式与
调用
dst.put(a,0,a.长度)
如果我们去看它提到的调用
公共FloatBuffer put(float[]src,int offset,int length)相对
批量输入方法(可选操作)。此方法传递浮点值
从给定的源数组导入此缓冲区。如果有更多的浮动
要从数组中复制,而不是保留在此缓冲区中,即,如果
长度>剩余()
引发BufferOverflowException。否则,此方法将复制
长度从给定数组浮动到此缓冲区,从
数组中的给定偏移量和此缓冲区的当前位置。
然后,此缓冲区的位置按长度递增。在其他情况下
words,调用此方法的形式为dst.put(src、off、len)
具有与循环完全相同的效果
for(int i=off;iByteBuffer vertexBuffer = ByteBuffer.allocate(3*Float.BYTES+3*Byte.BYTES);
是的,这没关系,因为实际上,
position
在另一个对象中增加了,这是调用vertexBuffer.asFloatBuffer()
时得到的引用
换句话说,如果您将代码更改为:
FloatBuffer floatBuffer = vertexBuffer.asFloatBuffer();
floatBuffer.put(new float[]{1, 2, 3});
System.out.println(floatBuffer.toString());
您将获得:
java.nio.ByteBufferAsFloatBufferB[pos=3 lim=3 cap=3]
是的,这没关系,因为实际上,
position
在另一个对象中增加了,这是调用vertexBuffer.asFloatBuffer()
时得到的引用
换句话说,如果您将代码更改为:
FloatBuffer floatBuffer = vertexBuffer.asFloatBuffer();
floatBuffer.put(new float[]{1, 2, 3});
System.out.println(floatBuffer.toString());
您将获得:
java.nio.ByteBufferAsFloatBufferB[pos=3 lim=3 cap=3]
这可能是
GLBuffers.newDirectByteBuffer
实现的一个特殊问题?它是什么?是分配缓冲区的jogl
util,无论如何不是这样,让我更新这个问题视图缓冲区的Javadoc清楚地说明它们保持自己的位置和限制。是的,对不起,午休:),让我检查一下它可能是GLBuffers的一个特殊问题。newDirectByteBuffer
实现?这是什么?这是分配缓冲区的jogl
util,无论如何不是这样,让我更新这个问题视图缓冲区的Javadoc清楚地说明它们保持自己的位置和限制。是的,对不起,午休:),让我检查一下