我从Kaka读取Protobuf,所以最终我得到了一个生成的Java对象。我想根据我得到的原始文件重命名/创建其他Protobuf。
假设我有两个类A和B。我的代码侦听Kafka主题并得到A。我想“转换”A到B,它几乎是相同的对象(变量名称几乎没有变化)。有没有办法重写Protobuf解析器?为了生成B而不是A?
例如:
Class A{
String aa;
int aaaa;
}
Class B{
String bb;
int bbbb;
}我的监听器得到A,我想得到B (bb=aa,bb=aaaa
发布于 2019-05-07 13:17:58
假设A和B是兼容的(相同的标签具有相同的类型),你可以序列化回你的proto并再次解析它。如果一个对象中缺少一些标签,这也会起作用,但如果存在两个具有不同类型的标签,则解析将主要失败。
原件:
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:
A a = GetAFromQueue();
B b = B.parseFrom(a.toByteArray());另一个(可能更好的)选择是从Kafka获取字节数组形式的消息,并根据需要将其解析为A或B。这避免了重新序列化数据,尽管具有不同类型问题的相同标记仍然是相关的。
byte[] data = GetDataFromQueue();
A a = A.parseFrom(data);
[...]
B b = B.parseFrom(data);https://stackoverflow.com/questions/54691131
复制相似问题