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

时间:2012-05-15 08:49:43

标签: c++ boost stl

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

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

通过这种方式我复制数据。我只想获取指针并避免复制数据。我想发送如下:

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

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

我需要做什么?

1 个答案:

答案 0 :(得分:2)

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