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回答

Qiujuer

2020-02-11

其实是这样的,总数可能很大,在这里我们举例为: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.

0
0

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2316 学习 · 476 问题

查看课程