LineBasedFrameDecoder

前言

Netty 自带多个粘包拆包解码器。今天介绍 LineBasedFrameDecoder,换行符解码器。

属性分析

  1. maxLength (每个完整的包的最大长度)
  2. failFast (是否快速失败,默认 false)
  3. discarding (是否进入丢弃模式)
  4. discardedBytes 丢弃字节数(用于抛出异常时提醒)
  5. offset 用于优化每次读取效率(bug 就是这里)
  6. stripDelimiter 是否应该剔除分隔符,默认剔除

decode 方法解析(包括 findEndOfLine())

虽然官方注释标注此解码器为换行符解码器,但我认为这是一个“换行符+最大长度”的一个解码器。

说下此解码器的逻辑:

首先限制单个包的大小,也是说,换行符和换行符之间的数据包的大小是用户配置的。超过最大则抛出异常。

每当有数据到来时,都会遍历缓冲区,找换行符,如果找到了,就返回数据;如果没找到,就记录此次读取到下标 offset,下次继续找。

如果找的过程中,长度超过用户设置的 maxLength,就进入丢弃模式:丢弃之前读取的所有字节,并根据 failFast 的属性决定什么时候抛出异常(如果是 true,则不等找到换行符,就抛出异常,反之,等找到换行符了,才抛出异常,这个异常是可以被用户的 exceptionCaught 方法捕获到的)。

整个流程大概如下图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值