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 就是通過直接從內存地址中獲取和設置數據的方式,提高性能。