9-12节的03:06,unConsumeEntityLength = entityLength - bodyRemaining的疑问
来源:9-12 消息分片传输设计与实现-4
qq_胜在终点_0
2020-02-07
这里有疑问, 为什么构建nextFrame的时候,长度不直接传入bodyRemaining呢?
unConsumeEntityLength 定义为未消费的数量, 未消费的数量不就是bodyRemaining吗?
unConsumeEntityLength = entityLength - bodyRemaining = 总数-未消费的数量 = 已消费的数量 ??
假设:
总数=entityLength = bodyRemaining =10;
第一次消费4个,bodyRemaining =10-4= 6, unConsumeEntityLength= 10-6=4
第二次消费4个,bodyRemaining =6-4= 2, unConsumeEntityLength= 4-2=2
第三次消费2个,bodyRemaining =2-2= 0, unConsumeEntityLength = 2-0=2 ??
麻烦老师帮忙解答一下, 急啊~
1回答
-
其实是这样的,总数可能很大,在这里我们举例为:100。单帧的消费水平有限,可能最多消费:10。
所以:
第一帧:entityLength = 100,bodyRemaining = 10,unConsumeEntityLength = 90
第二帧:entityLength = 90,bodyRemaining = 10,unConsumeEntityLength = 80
....
以此类推,直到unConsumeEntityLength=0,代表已全部读取完毕当前包。
在咱们设计中:bodyRemaining 代表当前帧中需要消费的数量,需要消费到bodyRemaining=0,才能代表当前帧已经被读取完成、或写入完成。
而:unConsumeEntityLength代表下一帧可消费的总量,但下一帧的极限值如果是10,那么下一帧初始化的时候,bodyRemaining就等于10.
bodyRemaining的值<=极限值。因为当总量小于当前帧极限值的时候,bodyRemaining就等于总量,unConsumeEntityLength就等于0.
00
相似问题