日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Netty--ByteBuf

發布時間:2024/4/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Netty--ByteBuf 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

NIO ByteBuffer局限性

ByteBuf功能

基本功能

讀寫功能

擴容與收縮

查找

Derived buffers

ByteBuffer互轉換

ByteBuf源碼

ByteBuf結構

繼承關系

分類

AbstractByteBuf

AbstractReferenceCountedByteBuf

UnpooledHeapByteBuf

PooledByteBuf

PooledDirectByteBuf

輔助類

ByteBufHolder

ByteBufAllocator

CompositeByteBuf

ByteBufUtil


NIO ByteBuffer局限性

  • ByteBuffer長度固定,不能動態擴展和收縮。
  • ByteBuffer只有一個position標識位置,讀寫需要flip()和rewind()來翻轉,較難控制。
  • API功能有限。

ByteBuf功能

基本功能

  • 7種基礎類型,byte數組,ByteBuffer(ByteBuf)等的讀寫
  • copy,slice等
  • 設置字節順序
  • 構造實例
  • 操作位置指針

讀寫功能

ByteBuf通過readIndexwriteIndex協助緩沖區讀寫操作。0 <= readIndex <= writeIndex <= capacity 。

ByteBuf讀寫方法分為:

  • getXXX(int index):返回指定索引位置的指定類型的值。不改變readIndex和writeIndex。
  • readXXX():讀取指定類型的值,會修改readIndex的值,根據指定類型增加readIndex。
  • setXXX(int index,XXX value):設置指定索引位置的值,不改變readIndex和writeIndex。
  • writeXXX(XXX value):寫入指定類型的值。會修改writeIndex的值,根據指定類型增加writeIndex。

在每次put操作時,都需要檢查剩余空間,如果空間不足,則會創建一個新的ByteBuf

擴容與收縮

  • discardReadBytes():收回丟棄空間,內部copy,移動readIdnex,writeIndex。
  • clear():清空緩沖區,不填充任何信息,僅修改readIndex,writeIndex為0
  • markReaderIndex()和markWriterIndex():
  • resetReaderIndex()和resetWriterIndex():

查找

  • indexOf(...)
  • bytesBefore(...)
  • forEachByte(...)

Derived buffers

  • duplicate():與源Buffer共享緩沖區。
  • copy(...):不與源Buffer共享緩沖區。
  • slice(...):與源Buffer共享緩沖區。

ByteBuffer互轉換

  • nioBuffer(...)
  • nioBuffers(...)

ByteBuf源碼

ByteBuf結構

繼承關系

分類

內存分配角度:

  • 堆內存(HeapByteBuf)

內存分配和回收速度快,可以被JVM回收。由于需要做一次內核Copy,性能低。

  • 直接內存(DirectByteBuf)

堆外內存,內存分配和回收速度快。不需要做一次內核Copy,性能高。

最佳實踐:I/O通信讀寫緩沖區用DirectByteBuf;業務消息編解碼使用HeapByteBuf。

內存回收角度

  • 基于池ByteBuf:可以重用ByteBuf。
  • 普通ByteBuf

AbstractByteBuf

ResourceLeakDetector leakDetector;

用于檢測對象是否泄漏。

AbstractReferenceCountedByteBuf

ReferenceCountUpdater

UnpooledHeapByteBuf

??? private final ByteBufAllocator alloc;
??? byte[] array;
??? private ByteBuffer tmpNioBuf;

PooledByteBuf<T>

??? private final Recycler.Handle<PooledByteBuf<T>> recyclerHandle;

??? protected PoolChunk<T> chunk;
??? protected long handle;
??? protected T memory;
??? protected int offset;
??? protected int length;
??? int maxLength;
??? PoolThreadCache cache;
??? ByteBuffer tmpNioBuf;
??? private ByteBufAllocator allocator;

PooledDirectByteBuf

輔助類

ByteBufHolder

ByteBufHolder是ByteBuf的容器。

ByteBufAllocator

字節緩沖區分配器。

PooledByteBufAllocator

UnpooledByteBufAllocator

CompositeByteBuf

多個ByteBuf實例組裝視圖。

ByteBufUtil

工具類

?

?

?

總結

以上是生活随笔為你收集整理的Netty--ByteBuf的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。