ByteBuf

作者: 追梦小蜗牛 | 来源:发表于2020-09-22 14:16 被阅读0次
image.jpg

介绍:

网络数据的基本单位是字节,ByteBuf是Netty的数据容器;Java NIO提供了ByteBuffer作为字节容器,Netty 的 ByteBuffer 替代品是 ByteBuf。解决了 JDK API 的局限性,又为网络应用程序的开发者提供了更好的 API。

优点:

  • 通过内置的复合缓冲区类型实现了透明的零拷贝。
  • 容量可以按需增长。
  • 在读和写这两种模式之间切换不需要调用 ByteBuffer 的 flip()方法。
  • 读和写使用了不同的索引。
  • 支持引用计数。
  • 支持池化。
    所有的网络通信都会涉及到字节序列的移动。

结构:

image.png

ByteBuf 维护了两个不同的索引:一个用于读取,一个用于写入。

使用模式:

  • 堆缓冲区。
  • 直接缓冲区。
  • 复合缓冲区

字节操作:

image.png
  • 随机访问索引。
  • 顺序访问索引。
  • 可丢弃字节。
  • 可读字节。
  • 可写字节。
  • 索引管理。
  • 派生缓冲区(slice、copy)。
    索引的管理可以通过调用 markReaderIndex()、markWriterIndex()、resetWriterIndex() 和resetReaderIndex()来标记和重置 ByteBuf 的 readerIndex 和 writerIndex读、写操作。

读写操作方法:

  • getByte(int):返回给定索引处的字节。
  • getBytes(int,outStream,...):将该缓冲区中从给定索引开始的数据传送到指定的目的地。
  • readByte():返回当前 readerIndex 处的字节,并将 readerIndex 增加 1。
  • readBytes(byte[] dst, int dstIndex, int length):将当前 ByteBuf 中从当前 readerIndex 处开始的数据传送到一个目标 ByteBuf 或者 byte[],从 目标的 dstIndex 开始的位置。本地的readerIndex 将被增加已经传
    输的字节数。

分配:

  • ByteBufAllocator(接口、池化)
  • Unpooled(未池化)
  • ByteBufUtil(静态辅助方法)

引用计数:

引用计数是一种通过在某个对象所持有的资源不再被其他对象引用时释放该对象所持有的资源来优化内存使用和性能的技术,都实现了 interface ReferenceCounted。

总结:

数据结构还是很重要的,任何数据最终还是要存储下来或者需要一个中间过渡,就像小船一样,一批一批的把人送到对岸;Netty的底层数据结构就是ByteBuf,一个类似于小船的容器,围绕着这个小船做了很多优化和设计。

相关文章

  • 读书笔记:ByteBuf

    ByteBuf的优点 ByteBuf的工作原理 在ByteBuf中存在一个readIndex和一个writeInd...

  • Netty ByteBuf入门

    Netty ByteBuf ByteBuf的基本结构 ByteBuf由一段地址空间,一个read index和一个...

  • Netty 内存分配 ByteBuf

    初识ByteBuf ByteBuf是io和应用程序的中间层;读数据时,ByteBuf先从io中读取,在发送给应用程...

  • netty(十一)初识Netty - ByteBuf 创建与读写

    本章节主要学习一下netty当中的ByteBuf,ByteBuf是对字节数据的封装。 接下来主要学习Bytebuf...

  • Netty学习--ByteBuf

    Netty使用ByteBuf替换Java NIO提供的ByteBuffer(使用过于复杂). ByteBuf 的A...

  • [Netty源码分析]ByteBuf(五)

    ByteBuf的释放

  • Netty系列-Bytebuf中pool、unpool、heap

    上一篇介绍了ByteBuffer和ByteBuf结构,Bytebuf提供接口方法要比ByteBuffer简洁并强大...

  • ByteBuf

    jdk自带ByteBuffer,看名字就知道作用差不多,区别是ByteBuffer读写都用一个指针,ByteBuf...

  • ByteBuf

    体系结构 从图可以看出来,ByteBuf分类主要是三个维度:Unpooled和PooledUnsafe和非Unsa...

  • ByteBuf

    介绍: 网络数据的基本单位是字节,ByteBuf是Netty的数据容器;Java NIO提供了ByteBuffer...

网友评论

      本文标题:ByteBuf

      本文链接:https://www.haomeiwen.com/subject/ftjwyktx.html