首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将protobuf转换为其他protobuf

将protobuf转换为其他protobuf
EN

Stack Overflow用户
提问于 2019-02-14 21:05:22
回答 1查看 452关注 0票数 0

我从Kaka读取Protobuf,所以最终我得到了一个生成的Java对象。我想根据我得到的原始文件重命名/创建其他Protobuf。

假设我有两个类A和B。我的代码侦听Kafka主题并得到A。我想“转换”A到B,它几乎是相同的对象(变量名称几乎没有变化)。有没有办法重写Protobuf解析器?为了生成B而不是A?

例如:

代码语言:javascript
复制
Class A{
String aa;
int aaaa;
}

Class B{
String bb;
int bbbb;
}

我的监听器得到A,我想得到B (bb=aa,bb=aaaa

EN

回答 1

Stack Overflow用户

发布于 2019-05-07 13:17:58

假设A和B是兼容的(相同的标签具有相同的类型),你可以序列化回你的proto并再次解析它。如果一个对象中缺少一些标签,这也会起作用,但如果存在两个具有不同类型的标签,则解析将主要失败。

原件:

代码语言:javascript
复制
Message A {
  string aa = 1;
  int32 aaaa = 2;
  int32 a_only = 3;
}

Message B {
  string bb = 1;
  int32 bbbb = 2;
  string b_only = 4;  // Must not be 3.
}

Java:

代码语言:javascript
复制
A a = GetAFromQueue();
B b = B.parseFrom(a.toByteArray());

另一个(可能更好的)选择是从Kafka获取字节数组形式的消息,并根据需要将其解析为A或B。这避免了重新序列化数据,尽管具有不同类型问题的相同标记仍然是相关的。

代码语言:javascript
复制
byte[] data = GetDataFromQueue();
A a = A.parseFrom(data);
[...]
B b = B.parseFrom(data);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54691131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档