zoukankan      html  css  js  c++  java
  • Netty(一):ByteBuf读写过程图解

    我们知道ByteBuf通过读写两个索引分离,避免了NIO中ByteBuffer中读写模式切换时,需要flip等繁琐的操作。

    今天就通过一段测试代码以及图例来直观的了解下ByteBuf中的readIndex, writeIndex以及capacity的概念。

    先贴出测试代码:

     1 public class ByteBuffTest {
     2 
     3     public static void main(String[] args){
     4         /*******************初始阶段**********************/
     5         ByteBuf buf = Unpooled.buffer(100, 200);
     6         System.out.println("writable bytes " + buf.writableBytes());
     7         System.out.println("readable bytes " + buf.readableBytes());
     8 
     9         /*******************写入数据**********************/
    10         String str = "write test";//UTF-8 英文字符占一个字节
    11         int length = str.getBytes().length;//因此得到的字节长度为10
    12         buf.writeBytes(str.getBytes());
    13         System.out.println("writable bytes " + buf.writableBytes());
    14         System.out.println("readable bytes " + buf.readableBytes());
    15 
    16         /*******************读取数据*********************/
    17         char c = (char)buf.readByte();//读取第一个字节,并转换成字符打印
    18         System.out.println("c:" + c);
    19         System.out.println("writable bytes " + buf.writableBytes());
    20         System.out.println("readable bytes " + buf.readableBytes());
    21 
    22         /*******************丢弃已读*********************/
    23         buf.discardReadBytes();
    24         System.out.println("writable bytes " + buf.writableBytes());
    25         System.out.println("readable bytes " + buf.readableBytes());
    26 
    27     }
    28 }

    然后是测试打印结果:

    对上述过程用图例直观表示:

  • 相关阅读:
    Java线程同步synchronized的理解
    MySQL基础操作(二)
    MySQL基础操作(一)
    MySQL备份--xtrabackup与mysqldump工具使用
    MySQL主从复制以及在本地环境搭建
    生活在长大——第一次冲刺小任务
    现代软件工程之敏捷开发
    入门github
    我的编程人生
    Java线程
  • 原文地址:https://www.cnblogs.com/insaneXs/p/9303652.html
Copyright © 2011-2022 走看看