buffer缓冲区

当用到二进制传输的时候,一定会用bytebuffer这个类,它是buffer接口的子类。
ByteBuffer byteBuffer = ByteBuffer.allocate(6);
虽然使用allocate方法创建的缓冲区并不是一次性地分配内存空间,但我们可以从用户地角度将一个缓冲区想象成一个长度为capacity的数组。[color=red]当缓冲区创建后,和数组一样,缓冲区的大小(capacity值)将无法改变,也无法访问缓冲区外的数据[/color]

既然缓冲区和数组类似,那么缓冲区也应该象数组一样可以标识当前的位置。缓冲区的position方法为我们提供了这个功能。position方法有两种重载形式,它们的定义如下:

public final int position()

public final Buffer position(int newPosition)

第一个重载形式用来获取缓冲区的当前位置。在创建缓冲区后,position的初始值是0,也就是缓冲区第一个元素的位置。当从缓冲区读取一个元素后,position的值加1.我们从这一点可以看出,position方法返回的位置就是当前可以读取的元素的位置。position的取值范围从0到capacity – 1.[color=red]如果position的值等于capacity,说明缓冲区当前已经没有数据可读了。[/color]

在大多数情况下不需要直接控制缓冲区的位置。缓冲区类提供的用于读写数据的方法可以自动地设置缓冲区的当前位置。在缓冲区类中,get和put方法用于读写缓冲区中的数据。 每当put方法向缓冲区写入一个数据后,缓冲区的当前位置都会加1.[color=red]如果缓冲区的当前位置已经等于capacity[/color],调用put方法就会抛出一个java.nio.BufferOverflowException异常。在缓冲区未初赋值的区域将被0填充。使用get方法可以得到缓冲区当前位置的数据,并使缓冲区的当前位置加1.和put方法一样,[color=red][/color]在缓冲区当前位置等于capacity时使用get方法也会抛出java.nio.BufferOverflowException异常

可以使用position方法将当前位置移到缓冲区的任何位置。缓冲区除了position和capacity外,还提供了一个标识limit来限制缓冲区可访问的范围。[color=red]在初始状态下,缓冲区的limit和capacity值相同。但limit和capacity的区别是limit可以通过limit方法进行设置,而capacity在创建缓冲区时就已经指定了,并且不能改变。limit还可以表示缓冲区中实际的数据量[/color]
while(byteBuffer.hasRemaining()) // 枚举byteBuffer中的数据,常用判断
byteBuffer.flip(); // 将limit设为position即2,然后将position设置为 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值