C++ STL 字符串流直接缓冲区访问

标签 c++ stl

这应该很常见,但我发现我找不到任何直接的解决方案很有趣。

基本上,我通过网络将文件读入字符串流。这是声明:

std::stringstream membuf(std::ios::in | std::ios::out | std::ios::binary);

现在我有一些 C 库想要直接访问内存的读取 block 。我怎么得到它?只读访问是好的。 C函数完成后,我将内存流处理掉,不需要它。

str()复制缓冲区,这似乎是不必要的,并且使内存加倍。

我是否遗漏了一些明显的东西?也许不同的 STL 类会更好。

编辑: 显然,不保证 stringstream 可以连续存储。是什么?

如果我使用 vector<char>如何获取字节缓冲区?

最佳答案

您可以通过自己编写缓冲区并在 stringstream 中使用该缓冲区来完全控制所使用的缓冲区。

stringstream membuf(std::ios::in | std::ios::out | std::ios::binary);
membuf.rdbuf(yourVeryOwnStreamBuf);

您自己的缓冲区应该来自 basic_streambuf , 并覆盖 sync()overflow()适当的方法。

对于您的内部表示,您可能可以使用 vector< char > 之类的东西。 , 和 reserve()将其调整到所需的大小,这样就不会进行重新分配和复制。

这意味着您事先知道所需空间的上限。但是如果事先不知道大小,最后还需要一个连续的缓冲区,那么拷贝当然是不可避免的。

关于C++ STL 字符串流直接缓冲区访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1877500/

相关文章:

c++ - 如何使negate_unary使用任何类型?

c++ - 为什么这个 C++ vector 使用这么多 RAM?

c++ - 另外重载的代码没有效果

c++ Lock类骨架

c++ - STL list::insert 的参数

c++ - 对于未排序的范围是否有等效的 std::includes ?

c++ - 如何改进这些嵌套的 for 循环

c++ - Bada 的 AppLog 奇怪地破坏了我报告的字符串

c++ - 从 JPG opencv 制作 avi 文件

c++ - 将 future 存储在列表中