![](/img/trans.png)
[英]Implement circular buffer to write/read arbitrary amount of data in a single call
[英]Read data into a circular buffer
是否可以將boost::circular_buffer
與boost::asio
?
具體來說,我想用boost::asio::async_write
讀取固定數量的字節,並將它們直接存儲在循環緩沖區中而不進行復制。
一些示例代碼會非常好!
截至目前(Boost 1.66),不可能將數據讀入boost::circular_buffer
因為它不會暴露任何方式來保留底層緩沖區中的空間,這是創建調用asio::read
所需的mutable_buffer
的要求asio::read
。
但是可以從boost::circular_buffer
寫一下:
boost::circular_buffer<char> cir_buf;
FillBuffer(cir_buf);
// Construct a buffer sequence with either 1 or 2 data chunks
std::vector<boost::asio::const_buffer> buffer_sequence;
auto arr1 = cir_buf.array_one();
buffer_sequence.push_back(boost::asio::buffer(arr1.first, arr1.second));
auto arr2 = cir_buf.array_two();
if (arr2.second != 0) {
buffer_sequence.push_back(boost::asio::buffer(arr2.first, arr2.second));
}
boost::asio::write(socket_, buffer_sequence);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.