byteBuffer的 asFloatBuffer()方法解释--创建视图缓冲区

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常用方法详解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘蓝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值