ByteBuf维护了两个不同的索引:一个用于读取,一个用于写入。当你从ByteBuf读取时,它的readIndex将会递增已经被读取的字节数。同样地,当你写入ByteBuf时,它的writeIndex也会被递增。
ByteBuf.png
ByteBuf byteBuf = Unpooled.copiedBuffer("Netty in Action", CharsetUtil.UTF_8);
ByteBuf buf = byteBuf.readerIndex(0);//将 readerIndex 移动到指定的位置
buf.markReaderIndex();//标记当前的 readerIndex
while (buf.isReadable()){
System.out.print((char) buf.readByte());
}
buf.resetReaderIndex();//回退到之前标记的 readerIndex,如果不添加此句,不会打印while循环里面输出。
while (buf.isReadable()){
System.out.print((char) buf.readByte());
}
- ByteBuf复制
Charset utf8 = Charset.forName("UTF-8");
ByteBuf buf = Unpooled.copiedBuffer("Netty in Action ", CharsetUtil.UTF_8);
ByteBuf slice = buf.slice(0, 15);
System.out.println(slice.toString(utf8));
buf.setByte(0, (byte) 'J');
System.out.println(buf.toString(utf8));
System.out.println(slice.toString(utf8));
Netty in Action
Jetty in Action
Jetty in Action
//数据是共享的,对其中一个所做的更改对另外一个也是可见的。
- ByteBuf复制
ByteBuf buf = Unpooled.copiedBuffer("Netty in Action ", CharsetUtil.UTF_8);
ByteBuf copy = buf.copy(0, 15);
System.out.println(copy.toString(utf8));
buf.setByte(0, (byte) 'J');
System.out.println(buf.toString(utf8));
System.out.println(copy.toString(utf8));
Netty in Action
Jetty in Action
Netty in Action
//数据不是共享的