使用Boost/C++;二进制格式 < >我想序列化类的实例,并使用C++ /Boost库通过TCP连接发送它们。有太多的工作例子了。。。有些使用文本流作为缓冲区,有些使用tcp::iostream。我不确定哪一个适合我的需要
要求:使用Boost/C++;二进制格式 < >我想序列化类的实例,并使用C++ /Boost库通过TCP连接发送它们。有太多的工作例子了。。。有些使用文本流作为缓冲区,有些使用tcp::iostream。我不确定哪一个适合我的需要,c++,serialization,boost,boost-asio,C++,Serialization,Boost,Boost Asio,要求: 不同体系结构上的可移植性(endiannes和bitness不应成为问题) 数据必须是二进制格式。(没有文本) 当前代码: // Client side: boost::asio::streambuf b; std::ostream os(&b); boost::archive::binary_oarchive oa(os); message m; // The `message' class is serializable // construct `m' oa <<
// Client side:
boost::asio::streambuf b;
std::ostream os(&b);
boost::archive::binary_oarchive oa(os);
message m; // The `message' class is serializable
// construct `m'
oa << m;
boost::asio::write(socket,b.data(),boost::asio::transfer_all());
// Server side:
boost::asio::streambuf b;
std::istream is(&b);
boost::archive::binary_iarchive ia(is);
boost::asio::read(socket,b,boost::asio::transfer_all());
message m;
ia >> m;
//客户端:
boost::asio::streambuf b;
标准:ostream操作系统和b;
boost::archive::binary_oarchive oa(操作系统);
消息m;//“message”类是可序列化的
//构造'm'
oa>m;
这是行不通的。服务器退出时出现
无效签名
异常。是否需要使用Boost?看起来有一个类似的SO问题-有一个响应引用了Boost Serialization TODO部分(见下图)-看起来作者的TODO列表中仍然有一个可移植的二进制存档,所以我不确定是否有一个Boost解决方案(目前)能满足您的要求
<>你可以考虑使用Boost文本序列化归档文件,即使你的类不是基于文本的。这样做的缺点是速度较慢,序列化格式更臃肿,但它是可移植的
要考虑的备选方案:
- (GPB)-此库用于平台无关和语言无关的通信。您不用创建“message”类和定义序列化,而是用GPB规范语言定义一个项,GPB提供工具来解析该规范并生成代码以对该项进行marshall/unmarshall
- -类似于GPB,但具有更丰富的规范语言
希望这能给您带来一些新的想法。您需要使用Boost吗?看起来有一个类似的SO问题-有一个响应引用了Boost Serialization TODO部分(见下图)-看起来作者的TODO列表中仍然有一个可移植的二进制存档,所以我不确定是否有一个Boost解决方案(目前)能满足您的要求 <>你可以考虑使用Boost文本序列化归档文件,即使你的类不是基于文本的。这样做的缺点是速度较慢,序列化格式更臃肿,但它是可移植的 要考虑的备选方案:
- (GPB)-此库用于平台无关和语言无关的通信。您不用创建“message”类和定义序列化,而是用GPB规范语言定义一个项,GPB提供工具来解析该规范并生成代码以对该项进行marshall/unmarshall
- -类似于GPB,但具有更丰富的规范语言
希望这能给您带来一些新的想法。我正在尝试编写可移植代码(尽可能多)。这就是使用boost的原因。目前,我可以忽略体系结构上的二进制可移植性。虽然上面的代码并没有在同一台机器上运行。。。无论如何,我需要关于Boost ASIO/序列化的二进制序列化的帮助。所以我接受这个答案并询问另一个问题。ThanksI将否决这个答案,因为我对OP提出的问题感兴趣,而你走了一条完全不同的道路。“回答被问到的问题”怎么样?我正在尝试编写可移植代码(尽可能多)。这就是使用boost的原因。目前,我可以忽略体系结构上的二进制可移植性。虽然上面的代码并没有在同一台机器上运行。。。无论如何,我需要关于Boost ASIO/序列化的二进制序列化的帮助。所以我接受这个答案并询问另一个问题。ThanksI将否决这个答案,因为我对OP提出的问题感兴趣,而你走了一条完全不同的道路。“回答被问到的问题”怎么样??