我已经从卡卡(Kaka)阅读了Protobuf,所以最终我得到了一个生成的Java对象。 我想根据自己的原始名称重命名/创建其他Protobuf。
说我有2个班级A和B。 我的代码听了Kafka主题并得到了A。 我想将A转换为B,这几乎是相同的Object(变量名称更改很少)。 有什么办法可以覆盖Protobuf解析器吗?为了生成B而不是A?
例如:
Class A{
String aa;
int aaaa;
}
Class B{
String bb;
int bbbb;
}
我的听众得到A,而我想得到B(bb = aa,bb = aaaa
答案 0 :(得分:0)
假设A和B兼容(相同的标签具有相同的类型),则可以序列化您的原型并再次解析它。 如果一个对象中缺少某些标签,这也将起作用,但是如果两个标签存在不同类型,则解析将大部分失败。
原型:
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);