JDK ByteBuffer & MINA IoBuffer 总结

 

JDK   ByteBuffer

 

属性:

Mark

上次position的快照

Position

当前读写索引未知

Limit

缓冲区限制

Capacity

缓冲区能力

Offset

偏移量

 

说明:

  • Position(Mark)<=limit<=capacity
  • position==limit时就没有字节可读写了
  • 每次getput都将增加position
  • 重置mark就是设置mark=-1

 

 

方法:

Limit(int)

如果position>limit, position = limit,如果mark>limit, 重置mark

Mark()

取当前的position的快照标记mark

Reset()

恢复position到先前标记的mark

Clear()

limit=capacity , position=0,重置mark,但是不清空数据,为了从头开始put做准备,其实就是清空数据,因为你put就覆盖了原来的数据

Rewind()

position=0,重置mark,一系列写操作后,为了从头开始get做准备,和clear()有用途上的区别,他大部分是用来从头开始读取,而clear是大部分用来重头开始填充,就是清理的意思

Flip()

limit=position , position=0,重置mask,为了将buf写出做好准备,一般是结束buf操作,将buf写入输出流时调用,这个必须要调用,否则极有可能position!=limit,导致position后面没有数据,每次写入数据到输出流时,必须确保position=limit

Remaining()

返回limit-position,返回缓冲器中的剩余字节

Wrap(byte[])

组装到新的buffercapacity=limit=byte[].lengthposition=0 重置mark

Slice()

分割缓冲器,将remaining的空间形成一个新的buffer,新的position=0limit=capacity=remaining,重置mark,和主缓冲区内容共享,其它都独立

Duplicate()

复制缓冲区,内容共享,其它都独立

asReadOnlyBuffer()

和duplicate一样,只是不可写

Compact()

positionlimit之间的字节移到最前面,position=limit-position,这就是这里的压缩的意思,一般是结束buf操作,将buf写入输出流时调用

Position(int)

position=newPosition,如果position<mark,重置mark

Remaining()

返回positionlimit之间的字节数

 

 

JDK ByteBuffer

Mina IoBuffer

动态扩展capacity

支持String读写

线程安全

可主动释放缓冲区占用内存

转载于:https://www.cnblogs.com/sunwei2012/archive/2010/08/27/1810089.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值