// 构造一个 `StreamReassembler`,最多可以存储 `capacity` 个字节。 StreamReassembler( const size_t capcity); // 接收一个子字符串并将任何新的连续字节写入流中。 // // `data`: 段 // `index` 表示 `data` 中第一个字节的索引(按顺序放置) // `eof`:该段的最后一个字节是整个流中的最后一个字节 void push_substring ( const string & data, const uint64_t index, const bool eof); // 访问重组的字节流
const ByteStream stream_out();
// 已存储但尚未重组的子串中的字节数 size_t unassembled_bytes () const ; // 内部状态是否为空(输出流除外) bool empty() const ;
这个实验主要是利用lab0写的读写字节流,完成一个字节重组器,对不按序到达的字串重组,排序好后读入字节流中,测试程序会自动读取字节流中的数据.
根据实验指示图,我们需要写一个数据结构,维持容量为capcity,绿色部分代表已经读入字节流但是还没读出的部分,红色部分代表存入数据结构,
但是还没有重组的部分,蓝色部分表示已经从字节流中读出的部分。
我们接受到data后,将不能重组的部分存储起来,如果能重组则直接重组,然后直接读入字节流。
不用担心读入失败问题,因为初始化时设置字节流的最大容量capcity和我们的数据结构维持的width是一样的,即绿色的部分永远小于width,所以只要能放进width的部分就可以直接读入字节流.
接受到data时,可能有超界的情况,比如:
原文:https://www.cnblogs.com/MYMYACMer/p/15174126.html