zoukankan      html  css  js  c++  java
  • 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相关
  • 相关阅读:
    Ubuntu20安装docker
    ubuntu 下mysql 大小写问题
    Tensorflow-常见报错解决方案
    迁移学习(Transfer Learning)
    c#的托管代码和非托管代码的理解
    .net面试题升级版
    ADO.NET知识点
    支持“WeShopDb”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
    .net 面试题
    6、zookeeper应用场景-分布式唯一ID
  • 原文地址:https://www.cnblogs.com/fubinhnust/p/11940291.html
Copyright © 2011-2022 走看看