java解析tcp报文bytebuf_Netty之缓冲区ByteBuf解读(一)

34e1702d76b5436419ebf0f44e8049d6.png

> Netty 在数据传输过程中,会使用缓冲区设计来提高传输效率。虽然,Java 在 NIO 编程中已提供 ByteBuffer 类进行使用,但是在使用过程中,其编码方式相对来说不太友好,也存在一定的不足。所以高性能的 Netty 框架实现了一套更加强大,完善的 ByteBuf,其设计理念也是堪称一绝。

ByteBuffer 分析

在分析 ByteBuf 之前,先简单讲下 ByteBuffer 类的操作。便于更好理解 ByteBuf 。

ByteBuffer 的读写操作共用一个位置指针,读写过程通过以下代码案例分析:

// 分配一个缓冲区,并指定大小

ByteBuffer buffer = ByteBuffer.allocate(100);

// 设置当前最大缓存区大小限制

buffer.limit(15);

System.out.println(String.format("allocate: pos=%s lim=%s cap=%s", buffer.position(), buffer.limit(), buffer.capacity()));

String content = "ytao公众号";

// 向缓冲区写入数据

buffer.put(content.getBytes());

System.out.println(String.format("put: pos=%s lim=%s cap=%s", buffer.position(), buffer.limit(), buffer.capacity()));

其中打印了缓冲区三个参数,分别是:

position 读写指针位置

limit 当前缓存区大小限制

capacity 缓冲区大小

打印结果:

25f16d3c0a42e780784d8ac4b1f32fe7.png

当我们写入内容后,读写指针值为 13,ytao公众号英文字符占 1 个 byte,每个中文占 4 个 byte,刚好 13,小于设置的当前缓冲区大小 15。

接下来,读取内容里的 ytao 数据:

buffer.flip();

System.out.println(String.format("flip: pos=%s lim=%s cap=%s", buffer.position(), buffer.limit(), buffer.capacity()));

byte[] readBytes = new byte[4];

buffer.get(readBytes);

System.out.println(String.format(&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值