2017-05-24 24 views
-1

我定義了很多protobuf消息,它們都有一個公共字段(消息定義和標籤號)。現在我可以獲得ProtoBuf消息的ByteString,它可以是我定義的任何消息。但現在我只關心第一場。我有這個字段的消息定義,但不是整個消息。 enter image description hereJava Protobuf解碼

我正在設計一個代理服務器,路由器信息設置在第一個字段,我不想關心每個請求消息的細節。

我的問題是:是否有一種方法來extraxt字段信息的protobuf byteString,如果我只有這個字段定義和標籤號。

回答

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

結果表明,場定期alined。所以特定標籤num處的commond字段可以通過這種方式得到。