丢弃数量个数
来源: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
相似问题