丢弃数量个数
来源:8-5 基于分隔符解码器分析
金刚小猫咪
2024-02-28

tooLongFrameLength为什么没有加minFrameLength + minDelimLength。也就是说处于丢弃状态下,本次查到了分隔符 这段区间没有累加到丢弃数量里面,但是确实是这一部分也丢弃了
1回答
-
好帮手慕小蓝
2025-02-11
在您提供的代码片段中,
tooLongFrameLength变量被用于跟踪由于帧过长而被丢弃的字节数。当检测到一个帧过长时,discardingTooLongFrame被设置为true,并且开始丢弃该帧。在丢弃帧的过程中,buffer.skipBytes(length - minFrameLength + minDelimLength)被调用以跳过整个帧,包括帧头和帧体。在丢弃帧之后,
discardingTooLongFrame被设置为false,表示不再处于初始状态。此时,tooLongFrameLength被设置为this.tooLongFrameLength,即之前丢弃的帧长度。然后this.tooLongFrameLength被重置为0,为下一次可能的丢弃做准备。关于您的问题,
tooLongFrameLength没有加上minFrameLength + minDelimLength是因为tooLongFrameLength应该只跟踪由于帧过长而被丢弃的字节数,不包括帧头的长度。minFrameLength + minDelimLength是帧的总长度,包括帧头和帧体。在丢弃帧时,您需要跳过整个帧,不仅仅是帧体。如果
tooLongFrameLength包括了帧头的长度,那么在下一次计算是否丢弃帧时可能会错误地包括帧头的长度,导致逻辑错误。因此,正确的逻辑是:
buffer.skipBytes(length - minFrameLength + minDelimLength)跳过整个帧,包括帧头和帧体。tooLongFrameLength只跟踪帧体被丢弃的字节数。this.tooLongFrameLength重置为0为下一次可能的丢弃做准备。
这样可以确保正确地跟踪和处理帧过长的情况,同时避免在下一次处理时错误地包括帧头的长度。
00
相似问题