簡體   English   中英

如何通過流為C ++,Java和Python交換二進制結構化數據?

[英]How to exchange binary structured data over a stream for C++, Java and Python?

說明

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

因此我的問題是:

如何通過流為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類似的語法和語義。

我做了什么

我考慮過使用現有的庫(例如Google Protocol Buffers),但這不支持流處理,因此需要在序列化之前創建完整的對象層次結構。

另外,盡管我要創建自己的二進制格式,但這是太多的工作和痛苦。

選項包括Apache Thrift,Google的協議緩沖區和Pache Avro。 可以在http://www.slideshare.net/IgorAnishchenko/pb-vs-thrift-vs-avro進行比較

因此,我建議您嘗試使用Apache Avro。

我建議您明確記錄如何對數據類型進行序列化,並根據需要用每種語言編寫序列化和反序列化代碼。 過去我發現,有了關於如何序列化數據的良好文檔,這相當輕松。

您的另一個主要選擇是標准化一種平台的默認序列化方法,但這意味着您必須弄清楚該方法並以其他語言實現。 由於默認的序列化方法通常很復雜且沒有充分的文檔記錄,因此這往往比較棘手。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM