Netty ByteBuf

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
//数据不是共享的

你可能感兴趣的:(Netty ByteBuf)