c++ - 我如何从 boost::streambuf 读取指针数据但没有复制数据

标签 c++ boost stl

我有一个流缓冲区,我需要发送 n 个我知道存在的数据(从 writer 那里获取) 我可以使用 belo 语法:

streambuf b;
chat mybuf[1024]
std::istream is(&b);
is.read(mybuf,500);

我就是这样复制数据的。我只想获取指针并避免复制数据。我想发送如下:

asio::tcp::socket socket_;
socket_->send(

有没有办法驱动 streambuf 并使用 protected gptr 和 `gbum,这是一个好方法吗?

我需要做什么?

最佳答案

boost::asio::streambuf 只不过是缓冲队列。使用 streambuf::data() .它返回一个缓冲区列表 committed缓冲区。发送/写入成功后使用streambuf::consume(size_t)删除/重用缓冲区。

streambuf b;
size_t size;
size= read( _socket, b.prepare( 1024 ) ); 
b.commit( size );   // after this function you may call read again
size= write( socket_, b.data() ); // you can check size() if there is anything
b.consume(size);  // remove size bytes from data() buffers  

关于c++ - 我如何从 boost::streambuf 读取指针数据但没有复制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10597187/

相关文章:

c++ - add_rect 标识符未找到 C++

c++ - 构建 luabind 时出现错误 C2665

c++ - 为什么不应该派生自 C++ std 字符串类?

c++ - 使用opencv通过反卷积对图像进行去模糊

c++ - 为什么我得到 "You must feed a value for placeholder tensor ' 输出 ' 与 dtype int64"?

c++ - 访问类之间动态分配的数组时出错

c++ - std::queue 具有不同的容器类型,具体取决于运行时数据

c++ - 使用 Boost program_options 指定级别(例如 --verbose)

c++ - 在 ref/cref 范围内同时迭代

c++ - 在 unordered_set 中插入一个新元素 : should the hint be end()?