从字符串流中的偏移量读取

Reading from offset in stringstream

我需要将读取的 header 和有效负载拆分为字符串流。

我在字符串流中找到了有效负载的开始位置。

可以通过以下方式阅读 header:

// where ss is the source stringstream
ssHeader.read(ss.str(), nDataStartPos-1);

现在我想将余数读入负载字符串流。

ssPayload.read(ss.str()+nDataStartPos, nTotalBytesRed);

失败并出现以下错误:

我猜测 str() 命令 returns 是一个临时命令,由字符串流的内部缓冲区构建。

所以我想我可以将 ssPayload 复制到一个字符串,然后做一个 substr,但是有没有更有效的方法来实现这个,或者 stringstream 是不适合这项工作的工具?

您猜对了,是的,stringstream 是错误的工具。

通常我们读入一个固定的缓冲区,重复将其内容复制到任何你想要的地方,直到所有内容都被读取。

是的,这很糟糕。

您可以使用流迭代器和 std::copy

如果数据(header 和有效负载)是文本,则使用普通 std::string 并使用 substr 提取 header 和有效负载。

如果数据是二进制的,那么您可以使用 std::vector<uint8_t>(或 std::vector<int8_t>)并使用例如提取数据std::copy_n。但是,如果数据是二进制的,为什么不简单地使用包含所需确切数据的压缩结构,包括 header(可能使用两种结构,一种用于 header,一种用于有效载荷)?