哪个网站可以接程序项目来做,如何破解网站后台管理,建网站多少钱 万户,深圳龙华区高峰社区protobuf 环境配置
1、安装编译器
下载地址
直接解压缩。
2、配置环境变量
环境变量Path 中增加安装目录的路径
3、检查是否配置成功
protoc
Usage: protoc [OPTION] PROTO_FILES
Parse PROTO_FILES and generate output based on the options given:-IPATH, --proto_pa…protobuf 环境配置
1、安装编译器
下载地址
直接解压缩。
2、配置环境变量
环境变量Path 中增加安装目录的路径
3、检查是否配置成功
protoc
Usage: protoc [OPTION] PROTO_FILES
Parse PROTO_FILES and generate output based on the options given:-IPATH, --proto_pathPATH Specify the directory in which to search forimports. May be specified multiple times;directories will be searched in order. If notgiven, the current working directory is used.If not found in any of the these directories,the --descriptor_set_in descriptors will bechecked for required proto file.--version #版本-h, --help #帮助--encodeMESSAGE_TYPE Read a text-format message of the given typefrom standard input and write it in binaryto standard output. The message type mustbe defined in PROTO_FILES or their imports.--deterministic_output When using --encode, ensure map fields aredeterministically ordered. Note that this orderis not canonical, and changes across builds orreleases of protoc.--decodeMESSAGE_TYPE Read a binary message of the given type fromstandard input and write it in text formatto standard output. The message type mustbe defined in PROTO_FILES or their imports.--decode_raw Read an arbitrary protocol message fromstandard input and write the raw tag/valuepairs in text format to standard output. NoPROTO_FILES should be given when using thisflag.--descriptor_set_inFILES Specifies a delimited list of FILESeach containing a FileDescriptorSet (aprotocol buffer defined in descriptor.proto).The FileDescriptor for each of the PROTO_FILESprovided will be loaded from theseFileDescriptorSets. If a FileDescriptorappears multiple times, the first occurrencewill be used.-oFILE, Writes a FileDescriptorSet (a protocol buffer,--descriptor_set_outFILE defined in descriptor.proto) containing all ofthe input files to FILE.--include_imports When using --descriptor_set_out, also includeall dependencies of the input files in theset, so that the set is self-contained.--include_source_info When using --descriptor_set_out, do not stripSourceCodeInfo from the FileDescriptorProto.This results in vastly larger descriptors thatinclude information about the originallocation of each decl in the source file aswell as surrounding comments.--retain_options When using --descriptor_set_out, do not stripany options from the FileDescriptorProto.This results in potentially larger descriptorsthat include information about options that wereonly meant to be useful during compilation.--dependency_outFILE Write a dependency output file in the formatexpected by make. This writes the transitiveset of input file paths to FILE--error_formatFORMAT Set the format in which to print errors.FORMAT may be gcc (the default) or msvs(Microsoft Visual Studio format).--fatal_warnings Make warnings be fatal (similar to -Werr ingcc). This flag will make protoc returnwith a non-zero exit code if any warningsare generated.--print_free_field_numbers Print the free field numbers of the messagesdefined in the given proto files. Extension rangesare counted as occupied fields numbers.--enable_codegen_trace Enables tracing which parts of protoc areresponsible for what codegen output. Not supportedby all backends or on all platforms.--pluginEXECUTABLE Specifies a plugin executable to use.Normally, protoc searches the PATH forplugins, but you may specify additionalexecutables not in the path using this flag.Additionally, EXECUTABLE may be of the formNAMEPATH, in which case the given plugin nameis mapped to the given executable even ifthe executables own name differs.--cpp_outOUT_DIR Generate C header and source.--csharp_outOUT_DIR Generate C# source file.--java_outOUT_DIR Generate Java source file.--kotlin_outOUT_DIR Generate Kotlin file.--objc_outOUT_DIR Generate Objective-C header and source.--php_outOUT_DIR Generate PHP source file.--pyi_outOUT_DIR Generate python pyi stub.--python_outOUT_DIR Generate Python source file.--ruby_outOUT_DIR Generate Ruby source file.--rust_outOUT_DIR Generate Rust sources.filename Read options and filenames from file. If arelative file path is specified, the filewill be searched in the working directory.The --proto_path option will not affect howthis argument file is searched. Content ofthe file will be expanded in the position offilename as in the argument list. Notethat shell expansion is not applied to thecontent of the file (i.e., you cannot usequotes, wildcards, escapes, commands, etc.).Each line corresponds to a single argument,even if it contains spaces.
E:\setups\protoc-25.0-win64\bin\protoc.exe --java_outE:\projects_study\research\base\target Data2.proto idea 中使用 protobuf
1、idea 安装 protobuf 相关插件
安装插件
protobuf generator根据 .proto 文件来生成 proto 对象pojo to proto类文件-右键-PojoProto, 将简单Java类型转成proto message拷贝至剪贴板
2、配置全局 protobuf 人工生成Java文件
1、引入包 !-- protobuf 支持 Java 核心包--dependencygroupIdcom.google.protobuf/groupIdartifactIdprotobuf-java/artifactIdversion3.21.11/version/dependency!-- proto 与 Json 互转会用到--dependencygroupIdcom.google.protobuf/groupIdartifactIdprotobuf-java-util/artifactIdversion3.15.3/version/dependency2、编写.proto文件
//使用 proto3 语法 ,未指定则使用proto2
syntax proto3;//生成 proto 文件所在包路径
package demon.research.proto;//生成的 proto 文件所在包路径
option java_package demon.research.proto;//生成的 proto 文件名
option java_outer_classnameDataGen;//message关键字 定义一个消息体。
message DataOriginal{int32 id 1;string code 2;string name 3;
}3、生成Java 文件
直接在文件上点击右键quick gen protobuf here则在此目录根据包生成一个java文件名字为Data.java.
quick gen protobuf rules 则根据配置的规则把java文件生成在指定的目录。
然后把生成的Java文件copy到java类目录下。
4、序列化和反序列化 //初始化数据DataGen.DataOriginal.Builder builder DataGen.DataOriginal.newBuilder();builder.setId(1).setCode(001).setName(张三).build();//序列化DataGen.DataOriginal build builder.build();//转换成字节数组byte[] s build.toByteArray();System.out.println(protobuf数据bytes[]: Arrays.toString(s));System.out.println(protobuf序列化大小: s.length);DataGen.DataOriginal data null;String jsonObject null;try {//反序列化data DataGen.DataOriginal.parseFrom(s);//转 jsonjsonObject JsonFormat.printer().print(data);} catch (Exception e) {e.printStackTrace();}System.out.println(Json格式化结果:\n jsonObject);System.out.println(Json格式化数据大小: jsonObject.getBytes().length);输出结果
protobuf数据bytes[]:[8, 1, 18, 3, 48, 48, 49, 26, 6, -27, -68, -96, -28, -72, -119]
protobuf序列化大小: 15
Json格式化结果:
{id: 1,code: 001,name: 张三
}
Json格式化数据大小: 50传输的数据确实比json格式的要小。
maven自动生成
引入插件 extensionsextensiongroupIdkr.motd.maven/groupIdartifactIdos-maven-plugin/artifactIdversion1.5.0.Final/version/extension/extensionsplugingroupIdorg.xolstice.maven.plugins/groupIdartifactIdprotobuf-maven-plugin/artifactIdversion0.6.1/versionconfigurationprotocArtifactcom.google.protobuf:protoc:3.21.11:exe:${os.detected.classifier}/protocArtifactpluginIdgrpc-java/pluginIdpluginArtifactio.grpc:protoc-gen-grpc-java:3.21.11:exe:${os.detected.classifier}/pluginArtifact/configurationexecutionsexecutiongoalsgoalcompile/goalgoalcompile-custom/goal/goals/execution/executions/plugin默认.proto文件的扫描目录为 ${basedir}/src/main/proto
默认生成的文件路径为${project.build.directory}/generated-sources/protobuf/java.
需要人工把代码放到指定目录。如果需要自动生成到指定目录则修改指定目录。 注意默认会把指定的目录数据都给删除掉。可以设置clearOutputDirectory为false。 附录
参考
下载地址
生成代码
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: DataOriginal.proto// Protobuf Java Version: 3.25.0// java_package 设置的包名
package demon.research.proto;//java_outer_classname 指定的类名
public final class DataGen {//避免修改private DataGen() {}public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {}public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) {registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry);}//构造器模式。public interface DataOriginalOrBuilder extends// protoc_insertion_point(interface_extends:demon.research.proto.DataOriginal)com.google.protobuf.MessageOrBuilder {/*** codeint32 id 1;/code* return The id.*/int getId();//******************* 会为字符串类型 生成序列化 方法。/*** codestring code 2;/code* return The code.*/String getCode();/*** codestring code 2;/code* return The bytes for code.*/com.google.protobuf.ByteStringgetCodeBytes();/*** codestring name 3;/code* return The name.*/String getName();/*** codestring name 3;/code* return The bytes for name.*/com.google.protobuf.ByteStringgetNameBytes();}/*** pre*message关键字 定义一个消息体。* /pre** Protobuf type {code demon.research.proto.DataOriginal}*/public static final class DataOriginal extendscom.google.protobuf.GeneratedMessageV3 implements// protoc_insertion_point(message_implements:demon.research.proto.DataOriginal)DataOriginalOrBuilder {private static final long serialVersionUID 0L;// Use DataOriginal.newBuilder() to construct.private DataOriginal(com.google.protobuf.GeneratedMessageV3.Builder? builder) {super(builder);}private DataOriginal() {code_ ;name_ ;}OverrideSuppressWarnings({unused})protected Object newInstance(UnusedPrivateParameter unused) {return new DataOriginal();}public static final com.google.protobuf.Descriptors.DescriptorgetDescriptor() {return DataGen.internal_static_demon_research_proto_DataOriginal_descriptor;}Overrideprotected FieldAccessorTableinternalGetFieldAccessorTable() {return DataGen.internal_static_demon_research_proto_DataOriginal_fieldAccessorTable.ensureFieldAccessorsInitialized(DataOriginal.class, Builder.class);}public static final int ID_FIELD_NUMBER 1;private int id_ 0;/*** codeint32 id 1;/code* return The id.*/Overridepublic int getId() {return id_;}public static final int CODE_FIELD_NUMBER 2;SuppressWarnings(serial)private volatile Object code_ ;/*** codestring code 2;/code* return The code.*/Overridepublic String getCode() {Object ref code_;if (ref instanceof String) {return (String) ref;} else {com.google.protobuf.ByteString bs (com.google.protobuf.ByteString) ref;String s bs.toStringUtf8();code_ s;return s;}}/*** codestring code 2;/code* return The bytes for code.*/Overridepublic com.google.protobuf.ByteStringgetCodeBytes() {Object ref code_;if (ref instanceof String) {com.google.protobuf.ByteString b com.google.protobuf.ByteString.copyFromUtf8((String) ref);code_ b;return b;} else {return (com.google.protobuf.ByteString) ref;}}public static final int NAME_FIELD_NUMBER 3;SuppressWarnings(serial)private volatile Object name_ ;/*** codestring name 3;/code* return The name.*/Overridepublic String getName() {Object ref name_;if (ref instanceof String) {return (String) ref;} else {com.google.protobuf.ByteString bs (com.google.protobuf.ByteString) ref;String s bs.toStringUtf8();name_ s;return s;}}/*** codestring name 3;/code* return The bytes for name.*/Overridepublic com.google.protobuf.ByteStringgetNameBytes() {Object ref name_;if (ref instanceof String) {com.google.protobuf.ByteString b com.google.protobuf.ByteString.copyFromUtf8((String) ref);name_ b;return b;} else {return (com.google.protobuf.ByteString) ref;}}private byte memoizedIsInitialized -1;Overridepublic final boolean isInitialized() {byte isInitialized memoizedIsInitialized;if (isInitialized 1) return true;if (isInitialized 0) return false;memoizedIsInitialized 1;return true;}Overridepublic void writeTo(com.google.protobuf.CodedOutputStream output)throws java.io.IOException {if (id_ ! 0) {output.writeInt32(1, id_);}if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(code_)) {com.google.protobuf.GeneratedMessageV3.writeString(output, 2, code_);}if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {com.google.protobuf.GeneratedMessageV3.writeString(output, 3, name_);}getUnknownFields().writeTo(output);}Overridepublic int getSerializedSize() {int size memoizedSize;if (size ! -1) return size;size 0;if (id_ ! 0) {size com.google.protobuf.CodedOutputStream.computeInt32Size(1, id_);}if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(code_)) {size com.google.protobuf.GeneratedMessageV3.computeStringSize(2, code_);}if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {size com.google.protobuf.GeneratedMessageV3.computeStringSize(3, name_);}size getUnknownFields().getSerializedSize();memoizedSize size;return size;}Overridepublic boolean equals(final Object obj) {if (obj this) {return true;}if (!(obj instanceof DataOriginal)) {return super.equals(obj);}DataOriginal other (DataOriginal) obj;if (getId()! other.getId()) return false;if (!getCode().equals(other.getCode())) return false;if (!getName().equals(other.getName())) return false;if (!getUnknownFields().equals(other.getUnknownFields())) return false;return true;}Overridepublic int hashCode() {if (memoizedHashCode ! 0) {return memoizedHashCode;}int hash 41;hash (19 * hash) getDescriptor().hashCode();hash (37 * hash) ID_FIELD_NUMBER;hash (53 * hash) getId();hash (37 * hash) CODE_FIELD_NUMBER;hash (53 * hash) getCode().hashCode();hash (37 * hash) NAME_FIELD_NUMBER;hash (53 * hash) getName().hashCode();hash (29 * hash) getUnknownFields().hashCode();memoizedHashCode hash;return hash;}public static DataOriginal parseFrom(java.nio.ByteBuffer data)throws com.google.protobuf.InvalidProtocolBufferException {return PARSER.parseFrom(data);}public static DataOriginal parseFrom(java.nio.ByteBuffer data,com.google.protobuf.ExtensionRegistryLite extensionRegistry)throws com.google.protobuf.InvalidProtocolBufferException {return PARSER.parseFrom(data, extensionRegistry);}public static DataOriginal parseFrom(com.google.protobuf.ByteString data)throws com.google.protobuf.InvalidProtocolBufferException {return PARSER.parseFrom(data);}public static DataOriginal parseFrom(com.google.protobuf.ByteString data,com.google.protobuf.ExtensionRegistryLite extensionRegistry)throws com.google.protobuf.InvalidProtocolBufferException {return PARSER.parseFrom(data, extensionRegistry);}public static DataOriginal parseFrom(byte[] data)throws com.google.protobuf.InvalidProtocolBufferException {return PARSER.parseFrom(data);}public static DataOriginal parseFrom(byte[] data,com.google.protobuf.ExtensionRegistryLite extensionRegistry)throws com.google.protobuf.InvalidProtocolBufferException {return PARSER.parseFrom(data, extensionRegistry);}public static DataOriginal parseFrom(java.io.InputStream input)throws java.io.IOException {return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);}public static DataOriginal parseFrom(java.io.InputStream input,com.google.protobuf.ExtensionRegistryLite extensionRegistry)throws java.io.IOException {return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);}public static DataOriginal parseDelimitedFrom(java.io.InputStream input)throws java.io.IOException {return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);}public static DataOriginal parseDelimitedFrom(java.io.InputStream input,com.google.protobuf.ExtensionRegistryLite extensionRegistry)throws java.io.IOException {return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input, extensionRegistry);}public static DataOriginal parseFrom(com.google.protobuf.CodedInputStream input)throws java.io.IOException {return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);}public static DataOriginal parseFrom(com.google.protobuf.CodedInputStream input,com.google.protobuf.ExtensionRegistryLite extensionRegistry)throws java.io.IOException {return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);}Overridepublic Builder newBuilderForType() { return newBuilder(); }public static Builder newBuilder() {return DEFAULT_INSTANCE.toBuilder();}public static Builder newBuilder(DataOriginal prototype) {return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);}Overridepublic Builder toBuilder() {return this DEFAULT_INSTANCE? new Builder() : new Builder().mergeFrom(this);}Overrideprotected Builder newBuilderForType(BuilderParent parent) {Builder builder new Builder(parent);return builder;}/*** pre*message关键字 定义一个消息体。* /pre** Protobuf type {code demon.research.proto.DataOriginal}*/public static final class Builder extendscom.google.protobuf.GeneratedMessageV3.BuilderBuilder implements// protoc_insertion_point(builder_implements:demon.research.proto.DataOriginal)DataOriginalOrBuilder {public static final com.google.protobuf.Descriptors.DescriptorgetDescriptor() {return DataGen.internal_static_demon_research_proto_DataOriginal_descriptor;}Overrideprotected FieldAccessorTableinternalGetFieldAccessorTable() {return DataGen.internal_static_demon_research_proto_DataOriginal_fieldAccessorTable.ensureFieldAccessorsInitialized(DataOriginal.class, Builder.class);}// Construct using demon.research.proto.DataGen.DataOriginal.newBuilder()private Builder() {}private Builder(BuilderParent parent) {super(parent);}Overridepublic Builder clear() {super.clear();bitField0_ 0;id_ 0;code_ ;name_ ;return this;}Overridepublic com.google.protobuf.Descriptors.DescriptorgetDescriptorForType() {return DataGen.internal_static_demon_research_proto_DataOriginal_descriptor;}Overridepublic DataOriginal getDefaultInstanceForType() {return DataOriginal.getDefaultInstance();}Overridepublic DataOriginal build() {DataOriginal result buildPartial();if (!result.isInitialized()) {throw newUninitializedMessageException(result);}return result;}Overridepublic DataOriginal buildPartial() {DataOriginal result new DataOriginal(this);if (bitField0_ ! 0) { buildPartial0(result); }onBuilt();return result;}private void buildPartial0(DataOriginal result) {int from_bitField0_ bitField0_;if (((from_bitField0_ 0x00000001) ! 0)) {result.id_ id_;}if (((from_bitField0_ 0x00000002) ! 0)) {result.code_ code_;}if (((from_bitField0_ 0x00000004) ! 0)) {result.name_ name_;}}Overridepublic Builder clone() {return super.clone();}Overridepublic Builder setField(com.google.protobuf.Descriptors.FieldDescriptor field,Object value) {return super.setField(field, value);}Overridepublic Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {return super.clearField(field);}Overridepublic Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {return super.clearOneof(oneof);}Overridepublic Builder setRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field,int index, Object value) {return super.setRepeatedField(field, index, value);}Overridepublic Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field,Object value) {return super.addRepeatedField(field, value);}Overridepublic Builder mergeFrom(com.google.protobuf.Message other) {if (other instanceof DataOriginal) {return mergeFrom((DataOriginal)other);} else {super.mergeFrom(other);return this;}}public Builder mergeFrom(DataOriginal other) {if (other DataOriginal.getDefaultInstance()) return this;if (other.getId() ! 0) {setId(other.getId());}if (!other.getCode().isEmpty()) {code_ other.code_;bitField0_ | 0x00000002;onChanged();}if (!other.getName().isEmpty()) {name_ other.name_;bitField0_ | 0x00000004;onChanged();}this.mergeUnknownFields(other.getUnknownFields());onChanged();return this;}Overridepublic final boolean isInitialized() {return true;}Overridepublic Builder mergeFrom(com.google.protobuf.CodedInputStream input,com.google.protobuf.ExtensionRegistryLite extensionRegistry)throws java.io.IOException {if (extensionRegistry null) {throw new NullPointerException();}try {boolean done false;while (!done) {int tag input.readTag();switch (tag) {case 0:done true;break;case 8: {id_ input.readInt32();bitField0_ | 0x00000001;break;} // case 8case 18: {code_ input.readStringRequireUtf8();bitField0_ | 0x00000002;break;} // case 18case 26: {name_ input.readStringRequireUtf8();bitField0_ | 0x00000004;break;} // case 26default: {if (!super.parseUnknownField(input, extensionRegistry, tag)) {done true; // was an endgroup tag}break;} // default:} // switch (tag)} // while (!done)} catch (com.google.protobuf.InvalidProtocolBufferException e) {throw e.unwrapIOException();} finally {onChanged();} // finallyreturn this;}private int bitField0_;private int id_ ;/*** codeint32 id 1;/code* return The id.*/Overridepublic int getId() {return id_;}/*** codeint32 id 1;/code* param value The id to set.* return This builder for chaining.*/public Builder setId(int value) {id_ value;bitField0_ | 0x00000001;onChanged();return this;}/*** codeint32 id 1;/code* return This builder for chaining.*/public Builder clearId() {bitField0_ (bitField0_ ~0x00000001);id_ 0;onChanged();return this;}private Object code_ ;/*** codestring code 2;/code* return The code.*/public String getCode() {Object ref code_;if (!(ref instanceof String)) {com.google.protobuf.ByteString bs (com.google.protobuf.ByteString) ref;String s bs.toStringUtf8();code_ s;return s;} else {return (String) ref;}}/*** codestring code 2;/code* return The bytes for code.*/public com.google.protobuf.ByteStringgetCodeBytes() {Object ref code_;if (ref instanceof String) {com.google.protobuf.ByteString b com.google.protobuf.ByteString.copyFromUtf8((String) ref);code_ b;return b;} else {return (com.google.protobuf.ByteString) ref;}}/*** codestring code 2;/code* param value The code to set.* return This builder for chaining.*/public Builder setCode(String value) {if (value null) { throw new NullPointerException(); }code_ value;bitField0_ | 0x00000002;onChanged();return this;}/*** codestring code 2;/code* return This builder for chaining.*/public Builder clearCode() {code_ getDefaultInstance().getCode();bitField0_ (bitField0_ ~0x00000002);onChanged();return this;}/*** codestring code 2;/code* param value The bytes for code to set.* return This builder for chaining.*/public Builder setCodeBytes(com.google.protobuf.ByteString value) {if (value null) { throw new NullPointerException(); }checkByteStringIsUtf8(value);code_ value;bitField0_ | 0x00000002;onChanged();return this;}private Object name_ ;/*** codestring name 3;/code* return The name.*/public String getName() {Object ref name_;if (!(ref instanceof String)) {com.google.protobuf.ByteString bs (com.google.protobuf.ByteString) ref;String s bs.toStringUtf8();name_ s;return s;} else {return (String) ref;}}/*** codestring name 3;/code* return The bytes for name.*/public com.google.protobuf.ByteStringgetNameBytes() {Object ref name_;if (ref instanceof String) {com.google.protobuf.ByteString b com.google.protobuf.ByteString.copyFromUtf8((String) ref);name_ b;return b;} else {return (com.google.protobuf.ByteString) ref;}}/*** codestring name 3;/code* param value The name to set.* return This builder for chaining.*/public Builder setName(String value) {if (value null) { throw new NullPointerException(); }name_ value;bitField0_ | 0x00000004;onChanged();return this;}/*** codestring name 3;/code* return This builder for chaining.*/public Builder clearName() {name_ getDefaultInstance().getName();bitField0_ (bitField0_ ~0x00000004);onChanged();return this;}/*** codestring name 3;/code* param value The bytes for name to set.* return This builder for chaining.*/public Builder setNameBytes(com.google.protobuf.ByteString value) {if (value null) { throw new NullPointerException(); }checkByteStringIsUtf8(value);name_ value;bitField0_ | 0x00000004;onChanged();return this;}Overridepublic final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {return super.setUnknownFields(unknownFields);}Overridepublic final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {return super.mergeUnknownFields(unknownFields);}// protoc_insertion_point(builder_scope:demon.research.proto.DataOriginal)}// protoc_insertion_point(class_scope:demon.research.proto.DataOriginal)private static final DataOriginal DEFAULT_INSTANCE;static {DEFAULT_INSTANCE new DataOriginal();}public static DataOriginal getDefaultInstance() {return DEFAULT_INSTANCE;}private static final com.google.protobuf.ParserDataOriginalPARSER new com.google.protobuf.AbstractParserDataOriginal() {Overridepublic DataOriginal parsePartialFrom(com.google.protobuf.CodedInputStream input,com.google.protobuf.ExtensionRegistryLite extensionRegistry)throws com.google.protobuf.InvalidProtocolBufferException {Builder builder newBuilder();try {builder.mergeFrom(input, extensionRegistry);} catch (com.google.protobuf.InvalidProtocolBufferException e) {throw e.setUnfinishedMessage(builder.buildPartial());} catch (com.google.protobuf.UninitializedMessageException e) {throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());} catch (java.io.IOException e) {throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());}return builder.buildPartial();}};public static com.google.protobuf.ParserDataOriginal parser() {return PARSER;}Overridepublic com.google.protobuf.ParserDataOriginal getParserForType() {return PARSER;}Overridepublic DataOriginal getDefaultInstanceForType() {return DEFAULT_INSTANCE;}}private static final com.google.protobuf.Descriptors.Descriptorinternal_static_demon_research_proto_DataOriginal_descriptor;private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTableinternal_static_demon_research_proto_DataOriginal_fieldAccessorTable;public static com.google.protobuf.Descriptors.FileDescriptorgetDescriptor() {return descriptor;}private static com.google.protobuf.Descriptors.FileDescriptordescriptor;static {String[] descriptorData {\n\022DataOriginal.proto\022\024demon.research.pro to\6\n\014DataOriginal\022\n\n\002id\030\001 \001(\005\022\014\n\004code\030\002 \001(\t\022\014\n\004name\030\003 \001(\tB\037\n\024demon.research.pro toB\007DataGenb\006proto3};descriptor com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData,new com.google.protobuf.Descriptors.FileDescriptor[] {});internal_static_demon_research_proto_DataOriginal_descriptor getDescriptor().getMessageTypes().get(0);internal_static_demon_research_proto_DataOriginal_fieldAccessorTable newcom.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_demon_research_proto_DataOriginal_descriptor,new String[] { Id, Code, Name, });}// protoc_insertion_point(outer_class_scope)
}
1、DataGen 类只提供框架方法。
public final class DataGen {private DataGen() {}public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {}public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) {registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry);}private static final com.google.protobuf.Descriptors.Descriptorinternal_static_demon_research_proto_DataOriginal_descriptor;private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTableinternal_static_demon_research_proto_DataOriginal_fieldAccessorTable;public static com.google.protobuf.Descriptors.FileDescriptorgetDescriptor() {return descriptor;}private static com.google.protobuf.Descriptors.FileDescriptordescriptor;
2、接口 DataOriginalOrBuilder只提供了get方法。
int getId();
String getCode();
com.google.protobuf.ByteString getCodeBytes();
String getName();com.google.protobuf.ByteString getNameBytes();3、类DataOriginal 继承类 com.google.protobuf.GeneratedMessageV3 实现接口 DataOriginalOrBuilder提供了get方法并保存了数据。同时提供了序列化与反序列化能力 public static final int ID_FIELD_NUMBER 1;private int id_ 0;/*** codeint32 id 1;/code* return The id.*/Overridepublic int getId() {return id_;}4、类Builder 继承类 com.google.protobuf.GeneratedMessageV3.BuilderBuilder 实现接口 DataOriginalOrBuilder提供了get/set方法