缓冲区ByteBuffer简单说明

说道 ByteBuffer的缓冲区,就需要知道缓冲区的的三个状态

1)       capacity

   即容量,也就是缓冲区的大小。它的值是在创建缓冲区的时候指定的,设定后无法对其进行修改。

2)      limit

读写限制:也就是缓冲区可以利用(进行读写)的范围的最大值,可以调用ByteBuffer对象的limit(int)方法进行设置,调用ByteBuffer对象的limit()获取缓冲区读写限制的大小;在刚开始创建缓冲区的时候limit的大小等于capacity。

3)      position

读写位置:表示当前进行读写操作时的位置,初始化为0,即缓冲区开始读或者写数据的位置。可以通过调用ByteBuffer对象的positon(int)方法设置它的值,通过position()可以获取它的值

 

这三个状态的数值满足一下关系:0=<position=<limit=<capacity


   在初始化缓冲区的情况下,position=0;limit = capacity

                                                              

缓冲区是通过put或者putXXX来向缓冲区添加数据,也可以通过put(index,vlaue)方法在指定的position和limit之间指定的地方添加数据;通过get()或者getXXX()来获取数据,也可以通过get(int  index)方法来获取position到limit之间指定的数据。

注意position的位置会随着数据的写入而移或者读取一个字节一个字节的移动(比如添加一个byte类型的数据position会+1,;添加一个int类型的数据position会+4;),直到position=limit为止。如果position==limit时,再添加数据会报java.nio.BufferOverflowException、再获取数据会报java.lang.IndexOutOfBoundsException。

    

正因为向缓冲区添加数据的时候写数据的时候position会变化,如果想获取缓冲区的数据直接调用get等相关方法获取数据是肯定不行的,因为此时数据在缓冲区存在数据的部分是0~~position之间,而读数据开始的位置position在此区间之外。所以要获取此区间的数据需要重新设置position的位置,ByteBuffer提供了一个filp方法,该方法主要进行两部操作

limit = position;(将limit设为当前position)

position =0;

此时通过get方法就可以获取到0到limit之间的数据了


可以参考http://my.oschina.net/flashsword/blog/159613

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

郭梧悠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值