protoc编译proto文件之Java源码结构分析一(addr.proto)

来源:互联网 发布:高清网络监控系统方案 编辑:程序博客网 时间:2024/06/08 02:32

一、addr.proto

option java_package = "com.test.protocol";option java_outer_classname = "AddressProto";message Address {    optional string province = 1;    optional string mayor = 2;}

二、AddressProto.java结构分析

这里写图片描述
如上图所示,AddressProto.java主要分为三部分:

第一部分:Interface AddressOrBuilder

其中定义了如下结构中各 fieldgetter的接口 方法:

message Address {    optional string province = 1;    optional string mayor = 2;}

getter 接口 方法具体如下:
这里写图片描述

第二部分

这里是整个AddressProto.java代码的核心部分。
概览如下:
这里写图片描述
这里写图片描述

其中可以分为三个部分:

1、Builder

Builder主要完成以下操作:
(1). 实现Interface AddressOrBuilder 各getter接口方法
(2). 提供 各field的setter方法
(3). Builder自身构造函数。
(4). 创建Address实例的方法。

这里写图片描述

2、实现Interface AddressOrBuilde接口并提供重载版本的parseFrom()方法。

这里写图片描述

3、原型proto文件中各field

原型proto内容:

message Address {    optional string province = 1;    optional string mayor = 2;}

各field代码:
这里写图片描述

第三部分:AddressProto类创建函数等

此部分包含AddressProto类创建函数,获取文件描述符等。
这里写图片描述

三、AddressProto.java完整代码

// Generated by the protocol buffer compiler.  DO NOT EDIT!// source: addr.protopackage com.test.protocol;public final class AddressProto {  private AddressProto() {}  public static void registerAllExtensions(      com.google.protobuf.ExtensionRegistry registry) {  }  public interface AddressOrBuilder      extends com.google.protobuf.MessageOrBuilder {    // optional string province = 1;    /**     * <code>optional string province = 1;</code>     */    boolean hasProvince();    /**     * <code>optional string province = 1;</code>     */    java.lang.String getProvince();    /**     * <code>optional string province = 1;</code>     */    com.google.protobuf.ByteString        getProvinceBytes();    // optional string mayor = 2;    /**     * <code>optional string mayor = 2;</code>     */    boolean hasMayor();    /**     * <code>optional string mayor = 2;</code>     */    java.lang.String getMayor();    /**     * <code>optional string mayor = 2;</code>     */    com.google.protobuf.ByteString        getMayorBytes();  }  /**   * Protobuf type {@code Address}   */  public static final class Address extends      com.google.protobuf.GeneratedMessage      implements AddressOrBuilder {    // Use Address.newBuilder() to construct.    private Address(com.google.protobuf.GeneratedMessage.Builder<?> builder) {      super(builder);      this.unknownFields = builder.getUnknownFields();    }    private Address(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }    private static final Address defaultInstance;    public static Address getDefaultInstance() {      return defaultInstance;    }    public Address getDefaultInstanceForType() {      return defaultInstance;    }    private final com.google.protobuf.UnknownFieldSet unknownFields;    @java.lang.Override    public final com.google.protobuf.UnknownFieldSet        getUnknownFields() {      return this.unknownFields;    }    private Address(        com.google.protobuf.CodedInputStream input,        com.google.protobuf.ExtensionRegistryLite extensionRegistry)        throws com.google.protobuf.InvalidProtocolBufferException {      initFields();      int mutable_bitField0_ = 0;      com.google.protobuf.UnknownFieldSet.Builder unknownFields =          com.google.protobuf.UnknownFieldSet.newBuilder();      try {        boolean done = false;        while (!done) {          int tag = input.readTag();          switch (tag) {            case 0:              done = true;              break;            default: {              if (!parseUnknownField(input, unknownFields,                                     extensionRegistry, tag)) {                done = true;              }              break;            }            case 10: {              bitField0_ |= 0x00000001;              province_ = input.readBytes();              break;            }            case 18: {              bitField0_ |= 0x00000002;              mayor_ = input.readBytes();              break;            }          }        }      } catch (com.google.protobuf.InvalidProtocolBufferException e) {        throw e.setUnfinishedMessage(this);      } catch (java.io.IOException e) {        throw new com.google.protobuf.InvalidProtocolBufferException(            e.getMessage()).setUnfinishedMessage(this);      } finally {        this.unknownFields = unknownFields.build();        makeExtensionsImmutable();      }    }    public static final com.google.protobuf.Descriptors.Descriptor        getDescriptor() {      return com.test.protocol.AddressProto.internal_static_Address_descriptor;    }    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable        internalGetFieldAccessorTable() {      return com.test.protocol.AddressProto.internal_static_Address_fieldAccessorTable          .ensureFieldAccessorsInitialized(              com.test.protocol.AddressProto.Address.class, com.test.protocol.AddressProto.Address.Builder.class);    }    public static com.google.protobuf.Parser<Address> PARSER =        new com.google.protobuf.AbstractParser<Address>() {      public Address parsePartialFrom(          com.google.protobuf.CodedInputStream input,          com.google.protobuf.ExtensionRegistryLite extensionRegistry)          throws com.google.protobuf.InvalidProtocolBufferException {        return new Address(input, extensionRegistry);      }    };    @java.lang.Override    public com.google.protobuf.Parser<Address> getParserForType() {      return PARSER;    }    private int bitField0_;    // optional string province = 1;    public static final int PROVINCE_FIELD_NUMBER = 1;    private java.lang.Object province_;    /**     * <code>optional string province = 1;</code>     */    public boolean hasProvince() {      return ((bitField0_ & 0x00000001) == 0x00000001);    }    /**     * <code>optional string province = 1;</code>     */    public java.lang.String getProvince() {      java.lang.Object ref = province_;      if (ref instanceof java.lang.String) {        return (java.lang.String) ref;      } else {        com.google.protobuf.ByteString bs =             (com.google.protobuf.ByteString) ref;        java.lang.String s = bs.toStringUtf8();        if (bs.isValidUtf8()) {          province_ = s;        }        return s;      }    }    /**     * <code>optional string province = 1;</code>     */    public com.google.protobuf.ByteString        getProvinceBytes() {      java.lang.Object ref = province_;      if (ref instanceof java.lang.String) {        com.google.protobuf.ByteString b =             com.google.protobuf.ByteString.copyFromUtf8(                (java.lang.String) ref);        province_ = b;        return b;      } else {        return (com.google.protobuf.ByteString) ref;      }    }    // optional string mayor = 2;    public static final int MAYOR_FIELD_NUMBER = 2;    private java.lang.Object mayor_;    /**     * <code>optional string mayor = 2;</code>     */    public boolean hasMayor() {      return ((bitField0_ & 0x00000002) == 0x00000002);    }    /**     * <code>optional string mayor = 2;</code>     */    public java.lang.String getMayor() {      java.lang.Object ref = mayor_;      if (ref instanceof java.lang.String) {        return (java.lang.String) ref;      } else {        com.google.protobuf.ByteString bs =             (com.google.protobuf.ByteString) ref;        java.lang.String s = bs.toStringUtf8();        if (bs.isValidUtf8()) {          mayor_ = s;        }        return s;      }    }    /**     * <code>optional string mayor = 2;</code>     */    public com.google.protobuf.ByteString        getMayorBytes() {      java.lang.Object ref = mayor_;      if (ref instanceof java.lang.String) {        com.google.protobuf.ByteString b =             com.google.protobuf.ByteString.copyFromUtf8(                (java.lang.String) ref);        mayor_ = b;        return b;      } else {        return (com.google.protobuf.ByteString) ref;      }    }    private void initFields() {      province_ = "";      mayor_ = "";    }    private byte memoizedIsInitialized = -1;    public final boolean isInitialized() {      byte isInitialized = memoizedIsInitialized;      if (isInitialized != -1) return isInitialized == 1;      memoizedIsInitialized = 1;      return true;    }    public void writeTo(com.google.protobuf.CodedOutputStream output)                        throws java.io.IOException {      getSerializedSize();      if (((bitField0_ & 0x00000001) == 0x00000001)) {        output.writeBytes(1, getProvinceBytes());      }      if (((bitField0_ & 0x00000002) == 0x00000002)) {        output.writeBytes(2, getMayorBytes());      }      getUnknownFields().writeTo(output);    }    private int memoizedSerializedSize = -1;    public int getSerializedSize() {      int size = memoizedSerializedSize;      if (size != -1) return size;      size = 0;      if (((bitField0_ & 0x00000001) == 0x00000001)) {        size += com.google.protobuf.CodedOutputStream          .computeBytesSize(1, getProvinceBytes());      }      if (((bitField0_ & 0x00000002) == 0x00000002)) {        size += com.google.protobuf.CodedOutputStream          .computeBytesSize(2, getMayorBytes());      }      size += getUnknownFields().getSerializedSize();      memoizedSerializedSize = size;      return size;    }    private static final long serialVersionUID = 0L;    @java.lang.Override    protected java.lang.Object writeReplace()        throws java.io.ObjectStreamException {      return super.writeReplace();    }    public static com.test.protocol.AddressProto.Address parseFrom(        com.google.protobuf.ByteString data)        throws com.google.protobuf.InvalidProtocolBufferException {      return PARSER.parseFrom(data);    }    public static com.test.protocol.AddressProto.Address parseFrom(        com.google.protobuf.ByteString data,        com.google.protobuf.ExtensionRegistryLite extensionRegistry)        throws com.google.protobuf.InvalidProtocolBufferException {      return PARSER.parseFrom(data, extensionRegistry);    }    public static com.test.protocol.AddressProto.Address parseFrom(byte[] data)        throws com.google.protobuf.InvalidProtocolBufferException {      return PARSER.parseFrom(data);    }    public static com.test.protocol.AddressProto.Address parseFrom(        byte[] data,        com.google.protobuf.ExtensionRegistryLite extensionRegistry)        throws com.google.protobuf.InvalidProtocolBufferException {      return PARSER.parseFrom(data, extensionRegistry);    }    public static com.test.protocol.AddressProto.Address parseFrom(java.io.InputStream input)        throws java.io.IOException {      return PARSER.parseFrom(input);    }    public static com.test.protocol.AddressProto.Address parseFrom(        java.io.InputStream input,        com.google.protobuf.ExtensionRegistryLite extensionRegistry)        throws java.io.IOException {      return PARSER.parseFrom(input, extensionRegistry);    }    public static com.test.protocol.AddressProto.Address parseDelimitedFrom(java.io.InputStream input)        throws java.io.IOException {      return PARSER.parseDelimitedFrom(input);    }    public static com.test.protocol.AddressProto.Address parseDelimitedFrom(        java.io.InputStream input,        com.google.protobuf.ExtensionRegistryLite extensionRegistry)        throws java.io.IOException {      return PARSER.parseDelimitedFrom(input, extensionRegistry);    }    public static com.test.protocol.AddressProto.Address parseFrom(        com.google.protobuf.CodedInputStream input)        throws java.io.IOException {      return PARSER.parseFrom(input);    }    public static com.test.protocol.AddressProto.Address parseFrom(        com.google.protobuf.CodedInputStream input,        com.google.protobuf.ExtensionRegistryLite extensionRegistry)        throws java.io.IOException {      return PARSER.parseFrom(input, extensionRegistry);    }    public static Builder newBuilder() { return Builder.create(); }    public Builder newBuilderForType() { return newBuilder(); }    public static Builder newBuilder(com.test.protocol.AddressProto.Address prototype) {      return newBuilder().mergeFrom(prototype);    }    public Builder toBuilder() { return newBuilder(this); }    @java.lang.Override    protected Builder newBuilderForType(        com.google.protobuf.GeneratedMessage.BuilderParent parent) {      Builder builder = new Builder(parent);      return builder;    }    /**     * Protobuf type {@code Address}     */    public static final class Builder extends        com.google.protobuf.GeneratedMessage.Builder<Builder>       implements com.test.protocol.AddressProto.AddressOrBuilder {      public static final com.google.protobuf.Descriptors.Descriptor          getDescriptor() {        return com.test.protocol.AddressProto.internal_static_Address_descriptor;      }      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable          internalGetFieldAccessorTable() {        return com.test.protocol.AddressProto.internal_static_Address_fieldAccessorTable            .ensureFieldAccessorsInitialized(                com.test.protocol.AddressProto.Address.class, com.test.protocol.AddressProto.Address.Builder.class);      }      // Construct using com.test.protocol.AddressProto.Address.newBuilder()      private Builder() {        maybeForceBuilderInitialization();      }      private Builder(          com.google.protobuf.GeneratedMessage.BuilderParent parent) {        super(parent);        maybeForceBuilderInitialization();      }      private void maybeForceBuilderInitialization() {        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {        }      }      private static Builder create() {        return new Builder();      }      public Builder clear() {        super.clear();        province_ = "";        bitField0_ = (bitField0_ & ~0x00000001);        mayor_ = "";        bitField0_ = (bitField0_ & ~0x00000002);        return this;      }      public Builder clone() {        return create().mergeFrom(buildPartial());      }      public com.google.protobuf.Descriptors.Descriptor          getDescriptorForType() {        return com.test.protocol.AddressProto.internal_static_Address_descriptor;      }      public com.test.protocol.AddressProto.Address getDefaultInstanceForType() {        return com.test.protocol.AddressProto.Address.getDefaultInstance();      }      public com.test.protocol.AddressProto.Address build() {        com.test.protocol.AddressProto.Address result = buildPartial();        if (!result.isInitialized()) {          throw newUninitializedMessageException(result);        }        return result;      }      public com.test.protocol.AddressProto.Address buildPartial() {        com.test.protocol.AddressProto.Address result = new com.test.protocol.AddressProto.Address(this);        int from_bitField0_ = bitField0_;        int to_bitField0_ = 0;        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {          to_bitField0_ |= 0x00000001;        }        result.province_ = province_;        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {          to_bitField0_ |= 0x00000002;        }        result.mayor_ = mayor_;        result.bitField0_ = to_bitField0_;        onBuilt();        return result;      }      public Builder mergeFrom(com.google.protobuf.Message other) {        if (other instanceof com.test.protocol.AddressProto.Address) {          return mergeFrom((com.test.protocol.AddressProto.Address)other);        } else {          super.mergeFrom(other);          return this;        }      }      public Builder mergeFrom(com.test.protocol.AddressProto.Address other) {        if (other == com.test.protocol.AddressProto.Address.getDefaultInstance()) return this;        if (other.hasProvince()) {          bitField0_ |= 0x00000001;          province_ = other.province_;          onChanged();        }        if (other.hasMayor()) {          bitField0_ |= 0x00000002;          mayor_ = other.mayor_;          onChanged();        }        this.mergeUnknownFields(other.getUnknownFields());        return this;      }      public final boolean isInitialized() {        return true;      }      public Builder mergeFrom(          com.google.protobuf.CodedInputStream input,          com.google.protobuf.ExtensionRegistryLite extensionRegistry)          throws java.io.IOException {        com.test.protocol.AddressProto.Address parsedMessage = null;        try {          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);        } catch (com.google.protobuf.InvalidProtocolBufferException e) {          parsedMessage = (com.test.protocol.AddressProto.Address) e.getUnfinishedMessage();          throw e;        } finally {          if (parsedMessage != null) {            mergeFrom(parsedMessage);          }        }        return this;      }      private int bitField0_;      // optional string province = 1;      private java.lang.Object province_ = "";      /**       * <code>optional string province = 1;</code>       */      public boolean hasProvince() {        return ((bitField0_ & 0x00000001) == 0x00000001);      }      /**       * <code>optional string province = 1;</code>       */      public java.lang.String getProvince() {        java.lang.Object ref = province_;        if (!(ref instanceof java.lang.String)) {          java.lang.String s = ((com.google.protobuf.ByteString) ref)              .toStringUtf8();          province_ = s;          return s;        } else {          return (java.lang.String) ref;        }      }      /**       * <code>optional string province = 1;</code>       */      public com.google.protobuf.ByteString          getProvinceBytes() {        java.lang.Object ref = province_;        if (ref instanceof String) {          com.google.protobuf.ByteString b =               com.google.protobuf.ByteString.copyFromUtf8(                  (java.lang.String) ref);          province_ = b;          return b;        } else {          return (com.google.protobuf.ByteString) ref;        }      }      /**       * <code>optional string province = 1;</code>       */      public Builder setProvince(          java.lang.String value) {        if (value == null) {    throw new NullPointerException();  }  bitField0_ |= 0x00000001;        province_ = value;        onChanged();        return this;      }      /**       * <code>optional string province = 1;</code>       */      public Builder clearProvince() {        bitField0_ = (bitField0_ & ~0x00000001);        province_ = getDefaultInstance().getProvince();        onChanged();        return this;      }      /**       * <code>optional string province = 1;</code>       */      public Builder setProvinceBytes(          com.google.protobuf.ByteString value) {        if (value == null) {    throw new NullPointerException();  }  bitField0_ |= 0x00000001;        province_ = value;        onChanged();        return this;      }      // optional string mayor = 2;      private java.lang.Object mayor_ = "";      /**       * <code>optional string mayor = 2;</code>       */      public boolean hasMayor() {        return ((bitField0_ & 0x00000002) == 0x00000002);      }      /**       * <code>optional string mayor = 2;</code>       */      public java.lang.String getMayor() {        java.lang.Object ref = mayor_;        if (!(ref instanceof java.lang.String)) {          java.lang.String s = ((com.google.protobuf.ByteString) ref)              .toStringUtf8();          mayor_ = s;          return s;        } else {          return (java.lang.String) ref;        }      }      /**       * <code>optional string mayor = 2;</code>       */      public com.google.protobuf.ByteString          getMayorBytes() {        java.lang.Object ref = mayor_;        if (ref instanceof String) {          com.google.protobuf.ByteString b =               com.google.protobuf.ByteString.copyFromUtf8(                  (java.lang.String) ref);          mayor_ = b;          return b;        } else {          return (com.google.protobuf.ByteString) ref;        }      }      /**       * <code>optional string mayor = 2;</code>       */      public Builder setMayor(          java.lang.String value) {        if (value == null) {    throw new NullPointerException();  }  bitField0_ |= 0x00000002;        mayor_ = value;        onChanged();        return this;      }      /**       * <code>optional string mayor = 2;</code>       */      public Builder clearMayor() {        bitField0_ = (bitField0_ & ~0x00000002);        mayor_ = getDefaultInstance().getMayor();        onChanged();        return this;      }      /**       * <code>optional string mayor = 2;</code>       */      public Builder setMayorBytes(          com.google.protobuf.ByteString value) {        if (value == null) {    throw new NullPointerException();  }  bitField0_ |= 0x00000002;        mayor_ = value;        onChanged();        return this;      }      // @@protoc_insertion_point(builder_scope:Address)    }    static {      defaultInstance = new Address(true);      defaultInstance.initFields();    }    // @@protoc_insertion_point(class_scope:Address)  }  private static com.google.protobuf.Descriptors.Descriptor    internal_static_Address_descriptor;  private static    com.google.protobuf.GeneratedMessage.FieldAccessorTable      internal_static_Address_fieldAccessorTable;  public static com.google.protobuf.Descriptors.FileDescriptor      getDescriptor() {    return descriptor;  }  private static com.google.protobuf.Descriptors.FileDescriptor      descriptor;  static {    java.lang.String[] descriptorData = {      "\n\naddr.proto\"*\n\007Address\022\020\n\010province\030\001 \001(" +      "\t\022\r\n\005mayor\030\002 \001(\tB!\n\021com.test.protocolB\014A" +      "ddressProto"    };    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {        public com.google.protobuf.ExtensionRegistry assignDescriptors(            com.google.protobuf.Descriptors.FileDescriptor root) {          descriptor = root;          internal_static_Address_descriptor =            getDescriptor().getMessageTypes().get(0);          internal_static_Address_fieldAccessorTable = new            com.google.protobuf.GeneratedMessage.FieldAccessorTable(              internal_static_Address_descriptor,              new java.lang.String[] { "Province", "Mayor", });          return null;        }      };    com.google.protobuf.Descriptors.FileDescriptor      .internalBuildGeneratedFileFrom(descriptorData,        new com.google.protobuf.Descriptors.FileDescriptor[] {        }, assigner);  }  // @@protoc_insertion_point(outer_class_scope)}
0 0