请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

丢弃数量个数

图片描述
tooLongFrameLength为什么没有加minFrameLength + minDelimLength。也就是说处于丢弃状态下,本次查到了分隔符 这段区间没有累加到丢弃数量里面,但是确实是这一部分也丢弃了

正在回答 回答被采纳积分+3

1回答

好帮手慕小蓝 2025-02-11 17:27:51

在您提供的代码片段中,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 为下一次可能的丢弃做准备。

这样可以确保正确地跟踪和处理帧过长的情况,同时避免在下一次处理时错误地包括帧头的长度。


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号