提问人:clash 提问时间:4/18/2021 最后编辑:clash 更新时间:4/21/2021 访问量:158
将 char 块转换为流
Convert char chunks to stream
问:
我有一个生成数据块的接口:
void next(unsigned char* buf, size_t len);
我想将这些块转换为流/队列。std::queue 可以工作,但我希望能够一次读取/写入多个字符,并且不要为每个字符进行内存分配。像 stringstream/streambuf 这样的东西起初看起来很有前途,但我需要密切关注内存消耗,并且无法弄清楚如何从这些流中删除读取的字符。由于我不需要能够向后搜索,因此我希望从底层缓冲区中删除已读取的字符。
大致相当于 bash 中的管道或 Go 中的通道就可以了。
有没有 STL 类可以做到这一点?
答:
0赞
Marshall Clow
4/18/2021
#1
德克会起作用。您可以一次编写多个字符,因此:
std::deque<char> q;
const char *p;
int len;
// [p, p+len) are the characters to be appended to the end of the deque
q.insert(q.end(), p, p + len);
评论
0赞
clash
4/18/2021
你是对的,deque 的底层容器结构允许毫不费力地写入 char 数组。不过,不幸的是,从 deque 中读取任意大小的块并不是单行的。我想我正在寻找一种类似套筒的结构,可以与 fread 等一起使用。
评论
std::string
std::stringstream