gpt4 book ai didi

c++ - 我如何将 "prepare "字符数组转换为 boost::asio::streambuf::mutable_buffers_type 缓冲区?

转载 作者:太空宇宙 更新时间:2023-11-04 13:24:21 25 4
gpt4 key购买 nike

在我的项目中,我将各种文件读入不同的缓冲区,然后想使用 boost::asio::streambuf 将这些缓冲区连接在一起以 boost 该过程。我已阅读 http://www.boost.org/doc/libs/1_59_0/doc/html/boost_asio/reference/streambuf.html 中的示例.

boost::asio::streambuf b;
// reserve 512 bytes in output sequence
boost::asio::streambuf::mutable_buffers_type bufs = b.prepare(512);
size_t n = sock.receive(bufs);
// received data is "committed" from output sequence to input sequence
b.commit(n);
std::istream is(&b);
std::string s;
is >> s;

我的问题是如何在“准备”bufs 之后按顺序手动分配多个 char 数组(char buf[512])到 boost::asio::streambuf::mutable_buffers_type bufs?例如,我想知道是否有办法:

    some_copy_func(bufs, array1,copy_size1); 
some_copy_func(bufs, array2,copy_size2);
some_copy_func(bufs, array3,copy_size3);

在这些复制之后,array1、array2 和 array3 将以相同的顺序复制到 bufs。在我打电话之后b.commit(copy_size1+copy_size2+copy_size1),这些数组中的所有缓冲区将在b的istream端可用。

我试图搜索 boost 文档,但找不到任何方法来执行此操作。我知道有 boost::asio::buffer_copy() 允许你将外部缓冲区复制到“bufs”,但是这个 buffer_copy() 会破坏 bufs 旧数据。有没有人在这个问题上有类似的经验?谢谢。

最佳答案

ostream

最简单的方法是按预期使用流缓冲...作为流缓冲:

boost::asio::streambuf sb;

{
char a[512], b[512], c[512];
std::ostream os(&sb);
os.write(a, sizeof(a));
os.write(b, sizeof(b));
os.write(c, sizeof(c));
}

复制

boost::asio::streambuf sb;

{
boost::asio::streambuf::mutable_buffers_type bufs = sb.prepare(3 * 512);
auto it = buffers_begin(bufs);
char a[512], b[512], c[512];

it = std::copy_n(a, sizeof(a), it);
it = std::copy_n(b, sizeof(b), it);
it = std::copy_n(c, sizeof(c), it);

sb.commit(sizeof(a) + sizeof(b) + sizeof(c));
}

关于c++ - 我如何将 "prepare "字符数组转换为 boost::asio::streambuf::mutable_buffers_type 缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33852492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com