【闪电侠学netty】第7章数据载体ByteBuf的介绍-创新互联

【Netty】读书笔记 - 跟闪电侠学netty 1. 内容概要 1.1 总结 1.1.1 内存管理

Netty 使用的是堆外内存,需要手动释放,使用引用计数的方式管理内存,当引用计数 =0,回收ByteBuf 底层内存

成都创新互联公司是专业的高陵网站建设公司,高陵接单;提供成都网站设计、做网站、成都外贸网站建设公司,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行高陵网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

原则:谁使用retain() , 谁释放release()

1.1.2  创建ByteBuf的方式
  • ByteBuf buffer = ctx.alloc().buffer(); (第6章,P41)
  • ByteBuf buffer = ByteBufAllocator.DEFAULT.buffer(9, 100);(第7章,P49)
  • ByteBuf buffer = ByteBufAllocator.DEFAULT.ioBuffer();(第8章,P59)
  • ByteBuf buffer = ctx.alloc().ioBuffer();(第9章 csdn)

其中 

ctx 为 ChannelHandlerContext 通道处理上下文对象

ctx.alloc() 返回 ByteBufAllocator ByteBuf的分配器

2. 课程内容 1 ByteBuf 的结构
  • ByteBuf 容器 - 当前容量 capacity  =  已废弃的字节 + 可读字节 + 可写字节
  • ByteBuf 容器 - 大容量 maxCapacity   =  capacity  + 可扩容字节
  • 被读写指针划分三部分
  • 从指针开始的地方读写,读写之间相互没有冲突
  • 已废弃的字节(通常为0)

1.1 readerIndex
  • 读指针,从0开始
  • ByteBuf 中每读一个字节,readerIndex自增1
  • 可读字节数 = writerIndex - readerIndex , 所以writeIndex = readerIndex,ByteBuf 不可读
1.2 writerIndex
  • 写指针,从0开始
  • ByteBuf中每写一个字节,writerIndex自增1,直到 capacity
  • 可写字节数 = capacity - writeIndex
1.3 扩容
  • ByteBuf 写数据,容量不足就会自动扩容
  • capacity 扩容到 maxCapacity
  • 超过maxCapacity会报错

2 常用 API
API类别名称使用
容量capacity()当前ByteBuf容量 capacity =  已废弃的字节 + 可读字节 + 可写字节
maxCapacity()大容量=  capacity + 可扩容字节
readableBytes()ByteBuf当前可读字节数,= writerIndex - readerIndex
isReadable()是否可读
writableBytes()ByteBuf当前可写字节数,= capacity - writeIndex
isWritable()是否可写
MaxWritableBytes()大可写字节数,= maxCapacity - writeIndex
读写指针readerIndex()返回当前读指针readerIndex
readerIndex(int)设置读指针index
writerIndex()返回当前写指针writerIndex
writerIndex(int)设置写指针index
markReaderIndex()保存当前读指针(推荐)
resetReaderIndex()把当前读指针恢复到之前保存的值(推荐)
markWriterIndex()保存当前写指针(推荐)
resetWriterIndex()把当前写指针恢复到之前保存的值(推荐)
读写readBytes(byte[] dst)把ByteBuf中的数据全部读取到dst
writeBytes(byte[] src)将src中的数据写入到ByteBuf
readByte()从ByteBuf中读取一个字节
writeByte(byte b)往ByteBuf写入一个字节
retain()引用计数加1
release()引用计数减1
slice()截取readerIndex到writeIndex的数据,返回大容量为原始ByteBuf的readableBytes()的ByteBuf
duplicate()共享原始ByteBuf,书本确实示例,后期补全
copy()复制原始ByteBuf,返回的ByteBuf写数据不影响原始ByteBuf
retainedSlice()等价于slice().retain(),需要调用一次release(),否则报错
retainedDuplicate等价于duplicate().retain(),需要调用一次release(),否则报错

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页标题:【闪电侠学netty】第7章数据载体ByteBuf的介绍-创新互联
链接URL:http://ybzwz.com/article/hpsph.html