2014-04-06 49 views
2

說明

我需要在C++,Java和Python程序之間通過流(TCP套接字或 管道)交換二進制結構化數據。如何通過C++,Java和Python的流交換二進制結構化數據?

所以我的問題:

如何通過對C++,Java和Python流交換二元結構的數據?

  1. 沒有辦法來創建完整的對象必須事先連載 - 必須有可能性流和流出來數據。
  2. 由於性能問題,我需要一些二進制協議格式。
  3. 我想使用(如果可能的話)一些現有的庫,因爲手工製作所有(去)序列化是一件痛苦的事情。

我想要什麼

我的想法是一樣的東西(對於C++作家):

StreamWriter sw(7); // fd to output to. 

while((DataSet const ds(get_next_row_from_db()))) { 
    sw << ds; // data set is some structured data 
} 

和C++讀者

StreamReader sr(9); // fd for input 

while(sr) { 
    DataSet const ds(sr); 

    // handle ds 
} 

有類似的語法和語義的Java和Python。

我做什麼

我想過使用像谷歌協議緩衝器現有的庫,但不支持流處理和有需要的序列化之前創建完整的對象層次。

另外我雖然關於創建自己的二進制格式,但這是太多的工作和痛苦。

+0

請閱讀[我應避免詢問什麼類型的問題?](http://stackoverflow.com/help/dont-ask)。 – lpapp

+1

對於那些關閉這個:我重新提出了恕我直言,它符合計算器規則的問題。如果您認爲仍有問題,請發表評論。如果不是,請重新打開。 –

+0

您仍然要求推薦。即使它重新開放,它也會突然關閉。放手吧。 – lpapp

回答

0

選項是Apache Thrift,Google的協議緩衝區和Pache Avro。好的比較是在那裏http://www.slideshare.net/IgorAnishchenko/pb-vs-thrift-vs-avro

所以我建議你嘗試Apache Avro。

+0

Google協議緩衝區舊且無法維護。原作者開始了一個名爲capnproto的項目,該項目應該更好,但總的來說,最好不要提供帶有答案的脫離主題的問題。 – lpapp

0

我會建議明確說明如何將數據類型序列化,並根據需要編寫每種語言的序列化和反序列化代碼。過去我發現,在數據如何序列化的良好文檔中,這是相當無痛的。

您的其他主要選擇是在一個平臺的默認序列化方法上進行標準化,但這意味着您必須找出該方法並在其他語言中實現。這往往是棘手的,因爲默認的序列化方法往往很複雜,沒有很好的文檔記錄。

+0

請不要提供帶有答案的離題問題。 – lpapp

+0

我不認爲這個問題很明顯,是脫離主題。詢問「有沒有」與請求「請推薦一個」有所不同,因爲前者承認可能沒有神奇的解決方案,並且可能不得不爲自己做更多的編碼。請注意,我的回答並不是對使用什麼工具或庫的意見或建議。 –

+0

從結束的原因:''問題要求我們推薦或找到一個工具,圖書館或最喜歡的非現場資源是堆棧溢出題外話,因爲他們傾向於吸引輿論的答案和垃圾郵件,而是描述問題和什麼「# – lpapp

相關問題