使用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 <<

要求:

  • 不同体系结构上的可移植性(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 << 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提出的问题感兴趣,而你走了一条完全不同的道路。“回答被问到的问题”怎么样??