ByteBuf与ByteBuffer
我们在Netty 源码分析之Java NIO已经详细了解了NIO Buffer。这里先回忆下NIO Buffer的一些特性:
-
ByteBuffer底层实现包含四个关键字段,并满足大小关系:mark <= position <= limit <= capacity;
-
ByteBuffer存在写模式和读模式两种状态,内部方法可以触发状态切换,比如flip方法从写状态切换为读状态;
-
不同类型的ByteBuffer支持不同的数据类型,包括ByteBuffer、ShortBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer等类型。
Netty的ByteBuf的底层实现有些许类似,但相比ByteBuffer实现了非常多扩展,并摒弃了一些不足:
-
不区分读写状态,不需要切换状态;
-
支持池化,避免频繁的GC回收;
-
支持引用计数;
-
类型兼容(同一个ByteBuf可以承载各种数据类型);
-
支持Unsafe操作的ByteBuf;
-
支持堆外和堆内两种ByteBuf;
-
支持零拷贝的复合类型CompositeByteBuf;
-
...
ByteBuf继承关系
我们先来看看ByteBuf的类图:
评论