将 char 块转换为流

Convert char chunks to stream

提问人:clash 提问时间:4/18/2021 最后编辑:clash 更新时间:4/21/2021 访问量:158

问:

我有一个生成数据块的接口:

void next(unsigned char* buf, size_t len);

我想将这些块转换为流/队列。std::queue 可以工作,但我希望能够一次读取/写入多个字符,并且不要为每个字符进行内存分配。像 stringstream/streambuf 这样的东西起初看起来很有前途,但我需要密切关注内存消耗,并且无法弄清楚如何从这些流中删除读取的字符。由于我不需要能够向后搜索,因此我希望从底层缓冲区中删除已读取的字符。

大致相当于 bash 中的管道或 Go 中的通道就可以了。

有没有 STL 类可以做到这一点?

C++ STL IOSTREAM

评论

1赞 Remy Lebeau 4/18/2021
您可以将字节写入 或 的末尾,然后根据需要从中提取字符。std::stringstd::stringstream

答:

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 等一起使用。