Netty系列4-buffer

(1)buffer
NIO通信中数据不会和通道直接交互。对于读来说,数据总是先从通道读到缓冲,应用程序再读缓冲的数据。对于写,数据也是先写入缓冲,再通过通道把缓冲的数据发送出去。
缓冲区本质上是一块可以读写的内存,这块内存被包装成NIO Buffer对象,并提供了一组方法来访问该内存。
(2)重要属性

  • capacity:Buffer内存块的大小。一旦Buffer满了,需要将其清空(通过读数据或者清除数据)才能继续写数据。
  • position:当前的位置。初始的position值为0。数据读写到Buffer后,position会移动到下一个可读写数据的Buffer单元。position最大可为capacity–1。读取数据时,也是从某个特定位置读。Buffer从写模式切换到读模式,position会被重置为0。
  • limit:写模式下,Buffer的limit表示你最多能往Buffer里写多少数据。写模式下,limit等于Buffer的capacity。切换Buffer到读模式时,limit表示你最多能读到多少数据,这时候,limi为写模式下的position值。
  • (3)方法
  • 每一个Buffer类都有allocate方法在堆上或者直接内存上分配
  • 写数据到Buffer有两种方式:读取Channel写到Buffer,inChannel.read(buf);通过Buffer的put()方法写到Buffer,buf.put。flip方法将Buffer从写模式切换到读模式。调用flip()方法会将position设回0,并将limit设置成之前position的值
  • 从Buffer中读取数据有两种方式:从Buffer读取数据写入到Channel, inChannel.write(buf);使用get()方法从Buffer中读取数据,buf.get()。调用flip()方法从写模式切换到读模式
  • 一旦读完了所有的数据,就需要清空缓冲区,让它可以再次被写入。有两种方式能清空缓冲区:调用clear()或compact()方法。clear()方法会清空整个缓冲区。compact()方法只会清除已经读过的数据。任何未读的数据都被移到缓冲区的起始处,新写入的数据将放到缓冲区未读数据的后面。
  • mark()与reset():调用Buffer.mark()方法,可以标记Buffer中的一个特定position。之后调用Buffer.reset()方法恢复到这个position。
  • equals():有相同的类型(byte、char、int等);Buffer中剩余的byte、char等的个数相等; Buffer中所有剩余的byte、char等都相同;以上三个条件都相等,两个Buffer相等
  • compareTo():第一个不相等的元素小于另一个Buffer中对应的元素或者所有元素都相等,第一个Buffer的元素个数比另一个少,则Buffer小于另一个Buffer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值