2012-05-15 13 views
0

我有一個流緩衝區,我需要發送我知道有n個數據指針數據(從作家得到它) 我可以用貝羅語法:我怎麼能讀取的boost ::流緩衝,但沒有拷貝數據

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

以這種方式我複製數據。我只想得到指針並避免複製數據。我想送象下面這樣:

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

有沒有辦法來推動streambuf和使用受保護的gptr和`gbum,這是一個好辦法?

我需要做什麼?

+0

爲什麼?如果您從磁盤或網絡連接進行讀取和寫入,*該*要比複製1024個字符花費更多的時間。 –

+0

很難完全按照你的要求。但是如果你想移動指向數據的指針,你不希望流做到這一點。你可能需要一個隊列。 –

+0

是的我要使用boost :: socket_ [socket_index] - >發送( –

回答

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