【问题标题】:Read data into a circular buffer将数据读入循环缓冲区
【发布时间】:2013-11-08 13:06:14
【问题描述】:

boost::circular_buffer 可以和boost::asio 一起使用吗?

具体来说,我想用boost::asio::async_write 读取固定数量的字节并将它们直接存储在循环缓冲区中而不进行复制。

一些示例代码会非常好!

【问题讨论】:

  • 是的,你可以。一些示例代码会很好。
  • 查看circular_buffer 的以下成员:array_onearray_tworotatelinearize。您可以使用array_one()array_two() 获取内部缓冲区(一个大缓冲区的切片)并使用它们提供boost::asio::buffer
  • 感谢@EvgenyPanasyuk 提供这些提示。如果我能让它与由array_onearray_two 组成的可变缓冲区序列一起工作,我会在星期一尝试。
  • 这个问题似乎没有可接受的答案。
  • 您确定要阅读使用async_write

标签: c++ boost network-programming boost-asio circular-buffer


【解决方案1】:

截至目前(Boost 1.66),无法将数据读取boost::circular_buffer,因为它没有公开任何方法来保留底层缓冲区中的空间,这是一项要求用于创建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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多