一.StreamReassembler.capacity 的意义
StreamReassembler._capacity
的含义:
ByteStream
的空间上限是capacity
StreamReassembler
用于暂存未重组字符串片段的缓冲区空间StreamReassembler.buffer
上限也是capacity
- 蓝色部分代表了已经被上层应用读取的已重组数据
- 绿色部分代表了
ByteStream
中已经重组并写入但还未被读取的字节流所占据的空间大小 - 红色部分代表了
StreamReassembler
中已经缓存但未经重组的若干字符串片段所占据的空间大小 - 同时绿色和红色两部分加起来的空间总占用大小不会超过
capacity
(事实上会一直小于它)
从代码层面来看:
- first unread 的索引等于
ByteStream
的bytes_read()
函数的返回值(我们一般不关注这个值) - first unassembled 的索引等于
ByteStream
的bytes_write()
函数的返回值(起始就是下一个期望的字节在流中的序号) - first unacceptable 的索引等于
ByteStream
的bytes_read()
加上capacity
的和(已超过ByteStream
的 buffer 限制) - first unread 和 first unacceptable 这两个边界是动态变化的,每次重组结束都需要更新。
最后,有个很重要点,ByteStream
和 StreamReassembler
的总容量有固定的限制,多余的数据需要丢弃(此需要对端重传数据,这就引出了重传等知识点)
二.滑动窗口碎片重组算法
每次收到的data数据由于网络传输不可靠的原因会产生乱序,重叠。需要对每次收到的碎片序列进行重组。可以定义装配器的