asFloatBuffer()方法
在byteBuffer类中,有这么六个方法来创建对应的视图缓冲区:
asDoubleBuffer()、asIntBuffer()、asLongBuffer()、asShortBuffer()、asFloatBuffer()、asCharBuffer()
这里我以我遇到的asFloatBuffer()为例,代码如下:
vertexBuffer = ByteBuffer.allocateDirect(vertexData.length * 4)//分配一个字节缓冲区,容量为32
.order(ByteOrder.nativeOrder())//定义了写入buffer时字节的顺序
.asFloatBuffer()
.put(vertexData);
vertexBuffer.position(0);
.asFloatBuffer()创建此字节缓冲区的视图,作为 float 缓冲区。
新缓冲区的内容将从此缓冲区的当前位置开始。此缓冲区内容的更改在新缓冲区中是可见的,反之亦然;这两个缓冲区的位置、界限和标记值是相互独立的。
新缓冲区的位置将为零,其容量和其界限将为此缓冲区中剩余字节数的四分之一,其标记是不确定的。当且仅当此缓冲区为直接时,新缓冲区才是直接的,当且仅当此缓冲区为只读时,新缓冲区才是只读的。
返回:
新的 float 缓冲区
此段内容参考java NIO(七) 缓冲区——视图缓冲区
视图缓冲区
asFloatBuffer()为当前的ByteBuffer创建一个CharBuffer的视图。在该视图buffer中的读写操作会按照ByteBuffer的字节序作用到ByteBuffer中的数据上。
也就是说,我们可以通过asFloatBuffer()方法创建一个Float型的缓冲区,这个缓冲区基于当前的ByteBuffer实现,我们把它叫做FloatBuffer型的视图,该视图共享当前的ByteBuffer空间(不一定是全部空间)。而只是从ByteBuffer类的对象中的当前读写位置position到读写限制limit位置之间的可用空间。在这个空间范围内,不论是ByteBuffer类的对象中还是在作为视图的新缓冲区中,对数据所做的修改,对另一个来说都是可见的。除了数据本身之外,两者的读写位置、读写限制和标记位置等都是相互独立的。视图buffer的readOnly属性和direct属性与ByteBuffer的一致,而且也只有通过这种方法,才可以得到其他数据类型的direct buffer。
相关参考:
java.nio.ByteBuffer 类 缓冲区
总而言之:
使用asFloatBuffer()在bytebuffer创建了一个float型的缓冲区(称为Float视图缓冲区),使用该视图可以更方便的以float型数据处理缓冲区的内容。
大部分内容大佬们都总结的很清楚,了解更多Buffer戳:
ByteBuffer常用方法详解