我正在尝试将cpp端的protobuf数据发送到java端。
我在.proto
中定义了多种消息类型在Cpp方面,我有每种消息类型的枚举,我将它添加到buf输出中,如下所示:
uint8_t* __temp = (uint8_t*)(buf);
*__temp++ = (type) >> 8;
*__temp = (type) & 0x00FF;
我如何得到这个'键入'我已添加到buf中,以便我可以实现类似
的功能MessageType parseFrom(byte[] data);
答案 0 :(得分:19)
目前尚不清楚具体要求是什么。但我假设你正在尝试发送不同类型的消息,接收器应该能够从接收到的字节中解析出正确的对象。这可以如下例所示完成:
message Message1 {
required string a = 1;
required string b = 2;
}
message Message2 {
required int64 id = 1;
required string data = 2;
}
message WrapperMessage {
required int64 commonField = 1;
oneof msg {
Message1 m1 = 2;
Message2 m2 = 3;
}
}
基本上,WrapperMessage对象总是通过包装Message1或Message2对象的线路发送。 然后在接收端,我们可以首先解析WrapperMessage对象,然后使用HasField方法检查包装对象中是否存在m1或m2字段,然后解析Message1或Message2对象。
旧版本的protobuf编译器可能无法使用“oneof”功能。
答案 1 :(得分:0)