ByteBuf維護(hù)了兩個(gè)不同的索引:一個(gè)用于讀取,一個(gè)用于寫入。當(dāng)你從ByteBuf讀取時(shí),它的readIndex將會(huì)遞增已經(jīng)被讀取的字節(jié)數(shù)。同樣地,當(dāng)你寫入ByteBuf時(shí),它的writeIndex也會(huì)被遞增。

ByteBuf.png
ByteBuf byteBuf = Unpooled.copiedBuffer("Netty in Action", CharsetUtil.UTF_8);
ByteBuf buf = byteBuf.readerIndex(0);//將 readerIndex 移動(dòng)到指定的位置
buf.markReaderIndex();//標(biāo)記當(dāng)前的 readerIndex
while (buf.isReadable()){
System.out.print((char) buf.readByte());
}
buf.resetReaderIndex();//回退到之前標(biāo)記的 readerIndex,如果不添加此句,不會(huì)打印while循環(huán)里面輸出。
while (buf.isReadable()){
System.out.print((char) buf.readByte());
}
- ByteBuf復(fù)制
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
//數(shù)據(jù)是共享的,對(duì)其中一個(gè)所做的更改對(duì)另外一個(gè)也是可見的。
- ByteBuf復(fù)制
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
//數(shù)據(jù)不是共享的