Linux的C++对象序列化

Luc*_*iza 2 c++ linux serialization

我正在做一个需要通过网络发送和接收数据的程序.我从未处理过对象序列化.我对有关Boost和Google Protocol Buffers的一些建议感到厌烦.在Linux中使用哪个最好?

如果您了解其他一些我将非常感谢您的帮助.

谢谢.

Sam*_*ler 6

我已经使用Boost.Serialization来序列化对象并通过套接字传输它们.它是一个非常灵活的库,如果您可以访问它们,对象可以被侵入地序列化

class Foo
{
public:
    template<class Archive>
    void serialize(Archive& ar, const unsigned int version)
    {
        ar & _foo;
        ar & _bar;
    }

    int _foo;
    int _bar;
};
Run Code Online (Sandbox Code Playgroud)

如果您无权访问需要序列化的对象,则可以非侵入式地进行

namespace boost {
namespace serialization {

template<class Archive>
void serialize(Archive& ar, Foo& f, const unsigned int version)
{
    ar & f._foo;
    ar & f._bar;
}

} // namespace serialization
} // namespace boost
Run Code Online (Sandbox Code Playgroud)

如果没有公开其成员(_foo_bar这里),有序列化Foo的技巧,文档很好地解释了这一点.要序列化Foo,可以使用boost::archive命名空间中的对象:text,binary或xml.

std::stringstream ss;
boost::archive::text_oarchive ar( ss );
Foo foo;
foo._foo = 1;
foo._bar = 2;
ar << foo;
Run Code Online (Sandbox Code Playgroud)

将存档重建为Foo对象就像这样完成

boost::archive::text_iarchive ar( ss );
Foo foo
ar >> foo;
Run Code Online (Sandbox Code Playgroud)

请注意,此示例相当简单,显然当您引入网络时,您将使用套接字和缓冲区.