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 }

    然后是测试打印结果:

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

  • 相关阅读:
    [MS POST]Visual Studio Tips and Tricks
    Mono
    网络编程 socket编程
    Project Properties
    Review Error Handling
    [ILDASM Boxing]从进一步了解Struct和Class的不同学到的
    Steps to Bind VS solution to Source Control
    不已0开头的数字正则
    Jquery 解决移动端onclick事件300ms延迟问题
    毫秒转换日期
  • 原文地址:https://www.cnblogs.com/insaneXs/p/9303652.html
Copyright © 2011-2022 走看看