博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
netty学习笔记二——ByteBuf类原理
阅读量:5245 次
发布时间:2019-06-14

本文共 2497 字,大约阅读时间需要 8 分钟。

ByteBuf提供对于原始数组(byte[])的抽象封装,它是一个byte数组的缓冲区。

ByteBuf通过两个位置指针完成缓冲区的读写操作,readerIndex用于读操作,writerIndex用以写操作。下面展示了如何通过两个指针将缓冲区分为三个区域。

+-------------------+------------------+------------------+       | discardable bytes |  readable bytes  |  writable bytes  |       |                   |     (CONTENT)    |                  |       +-------------------+------------------+------------------+       |                   |                  |                  |       0      <=      readerIndex   <=   writerIndex    <=    capacity

Readable bytes:真正意义上存储数据的地方,任何读(read)操作或者跳过(skip)操作都会根据读取内容增大readerIndex的值,当传入参数也是ByteBuf并且没有设置index时,writerIndex也会同步增加。当读取内容为空时,会抛出IndexOutOfBoundsException。

Writable bytes:用以写数据的区域,任何写操作都会都会根据写入内容增大writerIndex的值。当传入参数也是ByteBuf并且没有设置index时,readerIndex也会同步增加。当可写入内容不够时,会抛出IndexOutOfBoundsException。

Discardable bytes:已经被read操作读取过的数据,该区域初始值为0。当读操作结束的时候,该区域的大小就是当前writerIndex所在的大小。这个区域的数据可以通过discardReadBytes()方法进行回收。如下是清除过程示意。

BEFORE discardReadBytes()        +-------------------+------------------+------------------+       | discardable bytes |  readable bytes  |  writable bytes  |       +-------------------+------------------+------------------+       |                   |                  |                  |       0      <=      readerIndex   <=   writerIndex    <=    capacity      AFTER discardReadBytes()        +------------------+--------------------------------------+       |  readable bytes  |    writable bytes (got more space)   |       +------------------+--------------------------------------+       |                  |                                      |  readerIndex (0) <= writerIndex (decreased)        <=        capacity

clear()方法:该方法仅仅将readerIndex和writerIndex简单归零,本身并不清除里面的数据内容。简单示意图如下。

 

BEFORE clear()        +-------------------+------------------+------------------+       | discardable bytes |  readable bytes  |  writable bytes  |       +-------------------+------------------+------------------+       |                   |                  |                  |       0      <=      readerIndex   <=   writerIndex    <=    capacity     AFTER clear()        +---------------------------------------------------------+       |             writable bytes (got more space)             |       +---------------------------------------------------------+       |                                                         |       0 = readerIndex = writerIndex            <=            capacity

 

转载于:https://www.cnblogs.com/magotzis/p/9543612.html

你可能感兴趣的文章
QMUI UI库 控件 弹窗 列表 工具类 MD
查看>>
Nodejs --我自己的学习笔记
查看>>
实现幸运抽奖
查看>>
数据库表直接生成Excel
查看>>
git常用使用命令
查看>>
pip 升级 Appium-Python-Client
查看>>
树莓派 ubuntu 系统下修改config.txt文件调整分辨率记录
查看>>
js移除数组中德重复数据
查看>>
使用集合组织相关数据
查看>>
Storm:最火的流式处理框架
查看>>
(二十)、MVC设计思想的优缺点
查看>>
Python程序员的进化史
查看>>
测试窗体只能用于来自本地计算机的请求。
查看>>
忘记mysql密码,如何修改方法。
查看>>
SGU 326 Perspective ★(网络流经典构图の竞赛问题)
查看>>
[转]JS中match、replace方法中使用正则表达式
查看>>
JAVA 调用matlab【转】
查看>>
JavaScript系列教程(九):数组
查看>>
8_DeclarationsAndStatements
查看>>
转:网站Banner设计之道:文字处理
查看>>