我一直在Java中使用协议缓冲区。我发现protobuf对象的解析器,解析其他Protobuf数据并且不会抛出异常。相反,它返回一个解析器类型的对象,没有任何数据(不是默认实例)
以下是我的测试原型文件
option java_package = "tester";
option java_outer_classname = "TestProto";
message A{
string message = 1;
}
message B{
int64 id = 1;
}
下面是我的测试代码
TestProto.A a = TestProto.A.newBuilder().setMessage("My Test Message").build();
TestProto.B b = TestProto.B.getDefaultInstance().getParserForType().parseFrom(a.toByteString());
System.out.println("Is default instnace :" + (b.getDefaultInstanceForType() == b));
此代码无异常地运行,结果为' false'。
我无法理解这种行为,我需要一种情况,我必须解析一些序列化的protobuf对象,如果一个解析器失败,我必须尝试其他解析器。我该怎么解决这个问题呢。
感谢。
答案 0 :(得分:1)
Protobuf预先知道 - 并且同意 - 数据结构。如果您尝试使用完全不同的结构来解释消息,则会进行精确的零保证。
一切皆有可能。
基本上:你不能依赖这种行为。
注意: 保证某些更改,例如添加或删除字段(确保以后不会重复使用不同的类型/含义)。这很好,期待。但其他变化根本没有定义。
我需要一种情况,我必须解析一些序列化的protobuf对象,如果一个解析器失败,我必须尝试另一个解析器。我该怎么解决这个问题呢。
你不能。