我在做一个需要通过网络发送和接收数据的程序。我从来没有处理对象序列化。我参考了一些关于Boost和Google Protocol Buffers的建议。在Linux中使用哪个是最好的?Linux的C++对象序列化
如果你知道一些其他的我会感谢你的帮助。
谢谢。
我在做一个需要通过网络发送和接收数据的程序。我从来没有处理对象序列化。我参考了一些关于Boost和Google Protocol Buffers的建议。在Linux中使用哪个是最好的?Linux的C++对象序列化
如果你知道一些其他的我会感谢你的帮助。
谢谢。
我用Boost.Serialization序列化对象,并发送它们通过套接字。这是一个非常灵活的库,对象可以侵入被序列化,如果你有机会获得他们
class Foo
{
public:
template<class Archive>
void serialize(Archive& ar, const unsigned int version)
{
ar & _foo;
ar & _bar;
}
int _foo;
int _bar;
};
或非侵入,如果你不能够访问你需要序列
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
有对象是技巧连载美孚,如果它不公开其成员(_foo
和_bar
这里),该documentation解释这相当不错。要序列化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;
重建归档到一个Foo对象,像这样
boost::archive::text_iarchive ar(ss);
Foo foo
ar >> foo;
注意,当你介绍一个网络,你将使用插座和缓冲区这样做的例子是相当琐碎,很明显。
谢谢你的帮助。我会尝试。 – 2010-07-06 03:13:04
@卢卡斯,当你满意时,你应该接受我们的答案之一,回答你的问题。 – 2010-07-06 11:52:52
如果您通过网络传输数据时,我建议使用序列(不XML或类似)的二进制形式。 Qt offers classes for that,它允许您将Qt元系统中已知的任何类传递给数据流。
的问题是,C++真的不支持自省的语言功能,所以你必须要知道这是要序列化的数据。
在许多情况下的长度指示符(使用大端),随后的数据是串行化数据的好方法。
可能是这个问题的重复? http://stackoverflow.com/questions/1855628/network-protocol-object-serialization-in-c – bjg 2010-07-05 21:24:09
如何在不知道具体要求的情况下确定*最佳*? – 2010-07-06 02:11:13