我在做一個需要通過網絡發送和接收數據的程序。我從來沒有處理對象序列化。我參考了一些關於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