Я использую буферы протоколов для своего проекта на 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));
этот код работает без исключений, и результат «ложь».
Я не могу понять это поведение, мне нужна ситуация, когда мне нужно проанализировать некоторые сериализованные объекты protobuf, и если один парсер не работает, я должен попробовать другой парсер. Как я могу это решить.
Благодарю.
getUnknownFields
(илиgetUnknownFieldSet
, или подобного. Я забыл точное имя метода). - person Andy Turner   schedule 02.04.2018b.getDefaultInstanceForType() == b
неверно: используйтеequals
для сравнения экземпляров. - person Andy Turner   schedule 02.04.2018optional
по умолчанию в proto3. Это означает, что если два сообщения имеют совершенно разные поля (и идентификаторы полей), они по-прежнему могут быть назначены друг другу. Только содержимое будет потеряно, так как синтаксический анализатор предполагает, что это просто необязательное поле, о котором он не знает. - person Matthias247   schedule 02.04.2018