[英]How to exchange binary data between c++ and java using protocol buffers and ZeroMQ
[英]How to exchange binary structured data over a stream for C++, Java and Python?
我需要在C ++,Java和Python程序之間通過流(TCP套接字或管道)交換二進制結構化數據。
因此我的問題是:
如何通過流為C ++,Java和Python交換二進制結構化數據?
我的想法是(對於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.