0
A協議緩衝區初學者在這裏。如何使用協議緩衝區和ZeroMQ在C++和java之間交換二進制數據
我有具有經由返回char *
方法調用訪問二進制數據C++應用程序。
我想將這些數據片段放到buffer
,
使用協議緩衝區對它們進行序列化,
使用ZeroMQ
通過網絡發送它們,並從Java應用程序接收並解析它們。
這是我想出了迄今:
C++側
// Pointer to the binary data
char *buffer = buf->Buffer();
// Serialize data using protocol buffers
messaging::RequestMessage* msg = new messaging::RequestMessage;
msg->set_description("data");
msg->set_value(buffer);
int size = msg->ByteSize();
char *serialBuffer = malloc(size);
msg->SerializeToArray(serialBuffer, size);
// Send data using ZeroMQ
mq.connect(ss.str());
mq.send((char *)serialBuffer, size);
.proto文件
package messaging;
message RequestMessage {
required string description = 1;
optional bytes value = 2;
}
java端
// Receive data to byte[] array
byte[] request;
// Deserialize data
Request.RequestMessage msg = Request.RequestMessage.parseFrom(request);
byte[] test = msg.getValue().toByteArray();
System.out.println("Size of bytestring value " + msg.getValue().size());
process(msg.getDescription(), msg.getValue().toByteArray());
這是正確的嗎?
雖然二進制數據大小爲37062字節,但msg->ByteSize()
只報告4個字節,所以我猜想協議緩衝區將char*
視爲string
數組,並在找到\0
後立即停止。
我應該用什麼來代替?
我建議你試試看。 –
這不是原始代碼,它不能編譯,因爲'buffer'被聲明瞭兩次... – norisknofun
更正了緩衝區輸入錯誤 – charis