當前位置:編程學習大全網 - 源碼下載 - Netty源碼_UnpooledDirectByteBuf詳解

Netty源碼_UnpooledDirectByteBuf詳解

本篇文章我們講解緩存區 ByteBuf 八大主要類型中兩種,未池化直接緩沖區 UnpooledDirectByteBuf 和 未池化不安全直接緩沖區 UnpooledUnsafeDirectByteBuf 。

UnpooledDirectByteBuf 壹個基於 NIO ByteBuffer 的緩沖區。

建議使用 UnpooledByteBufAllocator.directBuffer(int, int) , Unpooled.directBuffer(int) 和 Unpooled.wrappedBuffer(ByteBuffer) ;而不是顯式調用構造函數。

有四個成員屬性:

通過 allocateDirect(initialCapacity) 方法創建壹個新的 NIO 緩存區實例來初始化此緩存區對象。

利用現有的 NIO 緩存區創建此緩存區。

通過 NIO 緩存區 buffer 對應方法獲取基本數據類型數據。

根據目標緩存區 dst 類型不同,處理的方式也不同。

妳會發現這些方法都是獲取此緩存區對應 NIO 緩存區 ByteBuffer 對象,調用 ByteBuffer 對象的方法,與 IO 流的交互,進行數據傳輸

和 get 系列方法壹樣, set 系列的實現也是靠 NIO 緩存區 ByteBuffer 對應方法。

剩余方法也幾乎都是和 NIO 緩存區 ByteBuffer 有關,而且也不難,就不做過多介紹了。

UnpooledDirectByteBuf 主要是通過 NIO 緩存區 buffer 來存儲數據。而它獲取和設置數據,也都是通過 NIO 緩存區對應方法實現的。

光看介紹,和 UnpooledDirectByteBuf 沒有任何區別。它也是 UnpooledDirectByteBuf 的子類。

那麽 UnpooledUnsafeDirectByteBuf 和 UnpooledDirectByteBuf 不同處在那裏呢?

通過復習 setByteBuffer 方法,獲取 NIO 緩存區 buffer 對應的直接內存地址。

通過 UnsafeByteBufUtil 對應方法,直接從內存地址獲取對應基本類型數據。

通過 UnsafeByteBufUtil 對應方法,直接向內存地址設置對應基本類型數據。

只有這個類型 hasMemoryAddress() 方法才會返回 true 。

UnpooledUnsafeDirectByteBuf 就是通過直接從內存地址中獲取和設置數據的方式,提高性能。

  • 上一篇:什麽樣的文章才會被百度容易收錄
  • 下一篇:海康威視poe供電攝像機采用的是什麽標準?
  • copyright 2024編程學習大全網