![](/img/trans.png)
[英]How to convert protocol buffers binary to JSON using the descriptor in Java
[英]How to exchange binary data between c++ and java using protocol buffers and ZeroMQ
這里是一個協議緩沖區初學者。
我有一個C ++應用程序,該應用程序可以通過返回char *
的方法調用來訪問二進制數據。
我想將這些數據放入buffer
,
使用協議緩沖區序列化它們,
使用ZeroMQ
通過網絡發送它們,並從Java應用程序接收並解析它們。
到目前為止,這是我提出的內容:
// 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);
package messaging;
message RequestMessage {
required string description = 1;
optional bytes value = 2;
}
// 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個字節,因此我想協議緩沖區msg->ByteSize()
char*
視為string
數組,並在找到\\0
立即停止。
我應該怎么用呢?
msg->set_value(buffer);
在這里,您沒有給protobuf提供任何方法來知道有多大的buffer
。 您僅向其傳遞了指向緩沖區開頭的指針。 因此,protobuf假定您正在使用C約定來傳遞以第一個NUL字節結尾的字符串。
為了告訴protobuf緩沖區有多大,還必須按大小傳遞:
msg->set_value(buffer, buf->Size());
(我只是在猜測buf
有一個Size()
方法;您必須檢查文檔中的任何類型。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.