Java Protobuf解码

时间:2017-05-24 10:01:11

标签: java protocol-buffers

我定义了很多protobuf消息,它们都有一个公共字段,(消息定义和标签号)。现在我可以获得ProtoBuf消息的ByteString,它可以是我定义的任何消息。但现在我只关心第一场。我有这个字段的消息定义,但没有整个消息。enter image description here

我正在设计代理服务器,路由器信息在第一个字段中设置,我不想关心每个请求消息的详细信息。

我的问题是:如果我只有这个字段定义和标签num,有没有办法将protxtuf byteString的第一个字段信息提取出来。

1 个答案:

答案 0 :(得分:0)

我自己已经弄清楚了,如果它对别人有帮助,我会发布答案。

        EduExamPackage.QuestionDetailTest.Builder testPb = EduExamPackage.QuestionDetailTest.newBuilder().setQuestion(EduExamPackage.Question.newBuilder().setAid(6666));
        byte[] byteData = testPb.build().toByteArray();
        EduExamPackage.Question question = EduExamPackage.Question.getDefaultInstance();
       for (int i = 0; i < 10000; i++) {
            for (int j = 0; j <10000000 ; j++) {
                try {

                    question = EduExamPackage.Question.PARSER.parseFrom(byteData, i, j);
                } catch (Exception e) {
                    continue;
                }
                if (question.hasAid()) {
                    System.out.println("found aid ! : " + question.getAid());
                    System.out.println("found !!!  \n  i: "+ i+ " j: "+j);
                    return ;
                }
            }
        }`

found !!!
i: 2 j: 3

结果显示字段经常变量。所以特定标签num的commond字段可以这样得到。