2013-04-25 55 views
0

我正在尋找序列化矢量作爲消息發送到zeromq。該結構將只包含基本類型(bool,string,int,float)。C++序列化和壓縮矢量<structs>平臺無關的方式

由於我通過網絡傳輸,我想使用某種壓縮來節省帶寬。

我也想這是有點平臺不可知論者。我將從Linux機器播放,但收件人可能是Windows或Linux。

第三方庫是可以的,只要它們可以在Windows和Linux下工作。

要發送zeromq消息,通常使用類似memcpy的內容來「加載」數據。 http://api.zeromq.org/2-1:zmq-msg-data

有人可以指向相應的庫,並提供序列化/壓縮以及隨後的反序列化/解壓縮的簡單示例代碼。我想的結構送看起來類似以下內容:

struct sampledata { 
    string testing_text; 
    int testing_int; 
    float testing_number; 
    bool testing_bool; 
} 

我覺得這必須是一個常見的C++編程問題,應該已經爲它開發好的解決辦法。

+0

你看過[google協議緩衝區](https://developers.google.com/protocol-buffers/)嗎? – 2013-04-25 19:16:00

+0

可能有十幾家不同的圖書館需要關注,我希望有經驗的人這樣做可以說明哪些方法有效,哪些方面不適合未來的讀者,因此我不必花費一天時間研究每個單獨的選項。 – user788171 2013-04-25 19:19:00

+0

問題是每個圖書館都會適合某人,這取決於他們的確切需求。對於SO這不是一個很好的問題。 – 2013-04-25 20:52:06

回答

1

你在找什麼是一個通用的序列化庫; there are many available options

我特別喜歡兩個:Google的Protocol Buffers和Apache的Avro。您可以使用ZMQ。

如果您訪問ZMQ FAQ(轉至「常規」部分),您會發現協議緩衝區是代理程序提及的序列化格式之一。

+0

協議緩衝區還支持壓縮?並將在Windows平臺上工作? – user788171 2013-04-25 19:31:57

+0

Protocol Buffers是語言中立,平臺無關 - 它可以在Windows,Linux等上運行,並且可以使用多種語言的API。關於壓縮 - 結果流是二進制的,你可以應用任何適合你的算法(壓縮取決於數據,所以很難判斷你是否會獲得任何東西)。 – Escualo 2013-04-25 19:38:27