前序
开篇第一节关注的是netty对ByteBuf的封装。对于封装的意义,我理解分几个方面:
- 通过引入Pool来管理内存分配,做到对象池服用
- 简化API操作
- 加入了UnSafe、DirectBuffer这些类型的buffer对象作为可选项。 (buffer包涉及的类太多,请使用查看原图)
大体分为这么几块:
- ByteBuf的派生类
- ByteBufAllocator的派生类
- 辅助的功能类
ByteBuf派生类
ByteBuf直接派生出来的类有这么几个:WrappedByteBuf
,AbstractByteBuf
,SwappedByteBuf
,EmptyByteBuf
WrappedByteBuf
WrapperedByteBuf完全代理ByteBuf的方法,它有三个继承类,分别是:AdvancedLeakAwareByteBuf
SimpleLeakAwareByteBuf
UnreleasableByteBuf
.
AdvancedLeakAwareByteBuf
和SimpleLeakAwareByteBuf
被ByteBufAllocator调用,用于封装LeakAwareBuf。他们在内部持有了一个ResourceLeak
用来记录操作
追踪是否有对象泄漏。
UnreleasableByteBuf
则会忽略掉ByteBuf的release和retain操作,适用于定义一些常量,比如:
private static final ByteBuf CRLF_BUF = unreleasableBuffer(directBuffer(CRLF.length).writeBytes(CRLF))