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
//数据不是共享的
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容