C++ 将数据读入循环缓冲区

C++ 将数据读入循环缓冲区,c++,boost,network-programming,boost-asio,circular-buffer,C++,Boost,Network Programming,Boost Asio,Circular Buffer,是否可以将boost::circular\u buffer与boost::asio一起使用 具体地说,我希望使用boost::asio::async\u write读取固定数量的字节,并将它们直接存储在循环缓冲区中,而无需复制 一些示例代码将非常好 到目前为止(Boost 1.66),无法将数据读入Boost::circular_buffer,因为它不会暴露任何方式来在底层缓冲区中保留空间,这是创建调用asio::read所需的可变_缓冲区的要求 但是可以从boost::circular\u b

是否可以将
boost::circular\u buffer
boost::asio
一起使用

具体地说,我希望使用
boost::asio::async\u write
读取固定数量的字节,并将它们直接存储在循环缓冲区中,而无需复制

一些示例代码将非常好

到目前为止(Boost 1.66),无法将数据读入
Boost::circular_buffer
,因为它不会暴露任何方式来在底层缓冲区中保留空间,这是创建调用
asio::read
所需的
可变_缓冲区的要求

但是可以从
boost::circular\u 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);
boost::循环缓冲电路;
填充缓冲区(cir_buf);
//用1或2个数据块构造缓冲区序列
std::向量缓冲区序列;
自动arr1=cir_buf.array_one();
buffer_sequence.push_back(boost::asio::buffer(arr1.first,arr1.second));
自动arr2=cir_buf.array_two();
如果(arr2.s!=0){
buffer_sequence.push_back(boost::asio::buffer(arr2.first,arr2.second));
}
boost::asio::write(套接字、缓冲区序列);

是的,您可以。一些示例代码会很好。看看
循环缓冲区的以下成员:,和。您可以使用
array\u one()
array\u two()
来获取内部缓冲区(一个大缓冲区的片)并将它们馈送到
boost::asio::buffer
。感谢@evgenypanasuk提供这些提示。如果我能让它使用由
array\u one
array\u two
组成的可变缓冲区序列,我将在周一尝试。这个问题似乎没有可接受的答案。你确定要使用
async\u write
读取吗?