У меня есть такой текст, как это:
item {
id: 1
name: 'aeroplane'
}
item {
id: 2
name: 'bicycle'
}
item {
id: 3
name: 'bird'
}
Я хочу прочитать и разобрать объект Java.
Я пишу прото как это:
syntax = "proto3";
package proto_test;
message ItemInfo {
int64 id = 1;
string name = 2;
}
message Item {
repeated Item item_info = 1;
}
тогда я выполняю ./protoc item.proto --java_out.
Я получил класс Java для этого прото.
Я пытаюсь прочитать это с помощью этого кода:
public static void main(String[] args) throws IOException {
ItemOuterClass.Item item = ItemOuterClass.Item.parseFrom(new FileInputStream("label_map.pbtxt"));
List<ItemOuterClass.ItemInfo> itemInfoList = item.getItemInfoList();
System.out.println(itemInfoList.size());
}
но когда я вызываю метод, я получаю следующее исключение:
Exception in thread "main" com.google.protobuf.InvalidProtocolBufferException: While parsing a protocol message, the input ended unexpectedly in the middle of a field. This could mean either that the input has been truncated or that an embedded message misreported its own length.
at com.google.protobuf.InvalidProtocolBufferException.truncatedMessage(InvalidProtocolBufferException.java:84)
at com.google.protobuf.CodedInputStream$ArrayDecoder.readRawBytes(CodedInputStream.java:1253)
at com.google.protobuf.CodedInputStream$ArrayDecoder.readBytes(CodedInputStream.java:907)
at com.google.protobuf.UnknownFieldSet$Builder.mergeFieldFrom(UnknownFieldSet.java:506)
at com.google.protobuf.UnknownFieldSet$Builder.mergeFrom(UnknownFieldSet.java:483)
at com.google.protobuf.UnknownFieldSet$Builder.mergeFrom(UnknownFieldSet.java:596)
at com.google.protobuf.UnknownFieldSet$Builder.mergeFrom(UnknownFieldSet.java:274)
at com.google.protobuf.CodedInputStream$ArrayDecoder.readGroup(CodedInputStream.java:828)
at com.google.protobuf.UnknownFieldSet$Builder.mergeFieldFrom(UnknownFieldSet.java:510)
at com.google.protobuf.GeneratedMessageV3.parseUnknownField(GeneratedMessageV3.java:298)
at com.jd.ai.algor.easydl.core.model.flow.strategy.impl.StudentInfoOuterClass$Student.<init>(StudentInfoOuterClass.java:98)
at com.jd.ai.algor.easydl.core.model.flow.strategy.impl.StudentInfoOuterClass$Student.<init>(StudentInfoOuterClass.java:44)
at com.jd.ai.algor.easydl.core.model.flow.strategy.impl.StudentInfoOuterClass$Student$1.parsePartialFrom(StudentInfoOuterClass.java:670)
at com.jd.ai.algor.easydl.core.model.flow.strategy.impl.StudentInfoOuterClass$Student$1.parsePartialFrom(StudentInfoOuterClass.java:664)
at com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:158)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:191)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:203)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:208)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:48)
at com.jd.ai.algor.easydl.core.model.flow.strategy.impl.StudentInfoOuterClass$Student.parseFrom(StudentInfoOuterClass.java:291)
at com.jd.ai.algor.easydl.core.model.flow.strategy.impl.SettlementDatasetValidateStrategy.main(SettlementDatasetValidateStrategy.java:79)
так, как я читаю этот текст, большое спасибо!