我定义了很多protobuf消息,它们都有一个公共字段,(消息定义和标签号)。现在我可以获得ProtoBuf消息的ByteString,它可以是我定义的任何消息。但现在我只关心第一场。我有这个字段的消息定义,但没有整个消息。
我正在设计代理服务器,路由器信息在第一个字段中设置,我不想关心每个请求消息的详细信息。
我的问题是:如果我只有这个字段定义和标签num,有没有办法将protxtuf byteString的第一个字段信息提取出来。
答案 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字段可以这样得到。