关于BuffByte研究

透明零拷贝

这个零拷贝和我理解的零拷贝其实是两个东西。这个强调的是ByteBuf之间可以通过零拷贝而获取到一个新的ByteBuf,而我理解的零拷贝是内核级别的。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10

// 复合类型与组件类型是兼容的
ByteBuf message = Unpooled.wrappedBuffer(header, body);

// 可以通过混合符合类型与普通缓冲区来创建一个符合类型
ByteBuf messageWithFooter = Unpooled.wrappedBuffer(message, footer);

// 
messageWithFooter.getUnsignedInt(messageWithFooter.readableBytes() - footer-readableBytes - 1);

我现在好奇的是这种符合类型的引用技术是如何处理的,哈哈。

ByteBuf是支持自动扩容的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11

ByteBuf b = Unpooled.buffer(4);

b.writeByte('1');
b.writeByte('2');
b.writeByte('3');
b.writeByte('4');

// 当写入的字节数超过初始容量4时,内部缓冲区自动分配具有较大的容量
b.writeByte('5');