gpt4 book ai didi

java - 如何确定 protobuf 中的消息类型以便我可以使用该 type.parsefrom(byte[ ])

转载 作者:搜寻专家 更新时间:2023-10-30 21:19:48 27 4
gpt4 key购买 nike

我正在尝试将 protobuf 数据从 cpp 端发送到 java 端。

我在 .proto 中定义了多种消息类型

在 Cpp 端,我有每个消息类型的枚举,我将它添加到 buf 输出中,如下所示:

uint8_t* __temp = (uint8_t*)(buf);
*__temp++ = (type) >> 8;
*__temp = (type) & 0x00FF;

如何获得我添加到 buf 中的“类型”,以便实现类似

MessageType parseFrom(byte[] data);

最佳答案

目前尚不清楚确切的要求是什么。但我假设您正在尝试发送不同类型的消息,并且接收方应该能够从接收到的字节中解析出正确的对象。这可以按照下面的示例所示完成:

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对象。

“oneof”功能在旧版本的 protobuf 编译器上可能不可用。

关于java - 如何确定 protobuf 中的消息类型以便我可以使用该 type.parsefrom(byte[ ]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30564404/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com