Как мне прочитать этот pbtxt с protobuf - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть такой текст, как это:

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)

так, как я читаю этот текст, большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...