byte 做爲網絡傳輸的基本單位,所以數據在網絡中進行傳輸時須要將數據轉換成byte進行傳輸。netty提供了專門的緩衝區byte生成api ByteBuf。api
Buffer API主要包括:網絡
- ByteBuf
- ByteBufHolder
Netty 緩衝 API 提供了幾個優點:ui
- 能夠自定義緩衝類型
- 經過一個內置的複合緩衝類型實現零拷貝
- 擴展性好,好比 StringBuilder
- 不須要調用 flip() 來切換讀/寫模式
- 讀取和寫入索引分開
- 方法鏈
- 引用計數
- Pooling(池)
ByteBuf索引線程
- 讀索引
- 寫索引
- 數據存儲在 JVM 的堆空間
- GC 能夠及時釋放內存空間
- 沒有中間內存交換的二次拷貝,也就是一般說的「零」拷貝。
- 駐留在垃圾回收掃描的堆區之外,須要手工管理內存(分配和釋放等)。
- 在 -XX:MaxDirectMemorySize=xxM大小限制下, 使用 Heap 以外的內存, GC對此」無能爲力」,也就意味着規避了在高負載下頻繁的GC過程對應用線程的中斷影響。
- 能夠建立多個不一樣的 ByteBuf,而後提供一個這些 ByteBuf 組合的視圖。
- 複合緩衝區就像一個列表,咱們能夠動態的添加和刪除其中的 ByteBuf,JDK 的 ByteBuffer 沒有這樣的功能。