Java - 如何仅从 FileDescriptorProto 获取消息正文

Java - How to get only message body from FileDescriptorProto

我正在尝试打印 proto 文件的消息正文内容。但是我下面的代码也在打印我不想要的导入详细信息。关于如何过滤此内容以便仅打印消息内容的任何建议。

FileInputStream fin = new FileInputStream("mymessages.desc");
Descriptors.FileDescriptorSet set = Descriptors.FileDescriptorSet.parseFrom(fin);
for(FileDescriptorProto fileDesc : set.getFileList()){
    List<DescriptorProto> descList = fileDesc.getMessageTypeList();
         for(DescriptorProto desc : descList ){
            System.out.Println(desc) ; // print all proto info including the imported field as well as message 
    }
  }
}

我的原型文件


syntax = "proto3"

import "validate.proto";

message User{
  string firstName = 1;
  string lastName = 2;
} 

您可以删除 header 行:

System.out.println(desc.replaceAll("(?sm)\A.*?(?=^message)", ""));

正则表达式 (?sm)\A.*?(?=^message) 匹配从开始到但不包括以 message 开头的第一行的所有内容,该行被替换为空白(即删除)。