在视图缓冲区上添加浮点数组不会增加位置是否正常?

时间:2016-01-18 10:47:47

标签: 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.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 doc说:

  

public final FloatBuffer put(float [] src)相对批量放置   方法(可选操作)。此方法传输整个内容   将给定的源float数组放入此缓冲区。调用   形式为dst.put(a)的这种方法的行为与完全相同   调用        dst.put(a,0,a.length)

如果我们去看它提到的调用

  

public FloatBuffer put(float [] src,int offset,int length)Relative   批量放置方法(可选操作)。此方法传输浮动   从给定的源数组进入此缓冲区。如果有更多的花车   要从数组中复制而不是保留在此缓冲区中,即if   长度>剩余(),然后没有浮动转移和a   抛出BufferOverflowException。否则,此方法复制   length从给定数组浮动到此缓冲区中,从   给定数组中的偏移量以及此缓冲区的当前位置。   此缓冲区的位置然后按长度递增。在其他位置   单词,调用dst.put形式的这个方法(src,off,len)   与循环具有完全相同的效果        for(int i = off; i< off + len; i ++)            dst.put(A [1]);

它清楚地表明这个位置会增加......

是正常还是我遗漏了什么?

编辑:与以下行为相同:

ByteBuffer vertexBuffer = ByteBuffer.allocate(3*Float.BYTES+3*Byte.BYTES);

1 个答案:

答案 0 :(得分:0)

是的,没关系,因为实际上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]