• ByteBuf Netty的数据容器


    两个组件

    • ByteBuf
    • ByteBufHolder

     使用模式

    1.堆缓冲区 backing array模式

    1. 直接缓冲区

    直接缓冲区的内容将驻留在常规的会被垃圾回收的堆之外。

    1. 复合缓冲区 CompositeByteBuf

    为了举例说明,让我们考虑一下一个由两部分——头部和主体——组成的将通过 HTTP 协议
    传输的消息。这两部分由应用程序的不同模块产生,将会在消息被发送的时候组装。该应用程序
    可以选择为多个消息重用相同的消息主体。当这种情况发生时,对于每个消息都将会创建一个新
    的头部。因为我们不想为每个消息都重新分配这两个缓冲区,所以使用 CompositeByteBuf 是一个
    完美的选择。

    JDK的方式实现

    CompositeByteBuf

     CompositeByteBuf 可能不支持访问其支撑数组,因此访问 CompositeByteBuf 中的数
    据类似于(访问)直接缓冲区的模式

     ByteBuf字节级操作

    关键理解ByteBuf的结构,readIndex和writeIndex分离

    • 随机访问索引
    • 顺序访问索引
    • 可丢弃字节
    • 可读字节
    • 可写字节
    • 索引管理,mark标记
    • 查找操作,查找某个字符在某个位置
    • 派生缓冲区,生成一个原ByteBuf的视图
    • 读写操作

    ByteBufHolder 接口

    除了实际的数据负载之外,我们还需要存储各种属性值。HTTP 响应便是一 个很好的例子,除了表示为字节的内容,还包括状态码、cookie 等。

    ctrl+alt+b查看ByteBufHolder的实现

    ByteBuf分配

    • 按需分配:ByteBufAllocator接口
    • Unpooled ByteBuf
    • ByteBufUtil
      • hexdump() 十六进制打印ByteBuf内容

    ByteBuf的引用计数

    一种通过在某个对象所持有的资源不再被其他对象引用时释放该对象所持有的资源来优化内存使用和性能的技术。

    • ReferenceCounted 接口,和ChannelHandler以及ChannelPipeline相关
  • 相关阅读:
    问题汇总
    Spring boot开发过程遇到的一些小问题
    Java 7 新特性
    I2C总线协议详解
    画布分割算法
    nordic __noinit__变量使用
    RTOS事件组使用流程
    RTOS软件定时器的使用
    RTOS互斥信号量的使用流程
    RTOS优先级翻转
  • 原文地址:https://www.cnblogs.com/fubinhnust/p/11940291.html
Copyright © 2020-2023  润新知