1、到https://github.com/google/protobuf/releases下载protoc-3.5.1-win32.zip
你们也可以选择其他 解压该文件,文件下有protoc.exe
2、需要maven环境,这里不做演示
添加依赖(依赖的版本要和上面的protoc的版本保持一致)
http://mvnrepository.com/artifact/com.google.protobuf/protobuf-java/3.5.1
<!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java -->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.5.1</version>
</dependency>
3、建立一个测试的msg.proto文件 这个文件我放在src/main/resources下
同时把protoc.exe也放在这个目录下
syntax = "proto2";
package protobuf;
option java_package = "com.binglo.AllNetty.protobuf";
option java_outer_classname = "PersonProbuf";
message RequestMsg {
required string cmd = 1;
required bytes requestParam = 2;
}
第一行是指定版本号,如果没有,编译器会报如下错误:
[libprotobuf WARNING google/protobuf/compiler/parser.cc:547] No syntax specified for the proto file. Please use ‘syntax = “proto2”;’ or ‘syntax = “proto3”;’ to specify a syntax version. (Defaulted to proto2 syntax.
第二行是包名
第三行是生成java文件后的包名
第四行是生成的类名
message
的定义,他是用来存放数据域的,数据域有自己的类型。
一个域由以下部分组成:修饰词 类型 域名 = 标记值
name
,是string
类型的,前面还有 required
修饰符,表示这个域必须有,后面还有 = 1
,这个符号,这是用来在二进制编码里面唯一确认当前的域的,如果你某些域用的很频繁,应该首先分配1-15
,这也是作为优化的一种方式。
email
是optional
,也就是可选的,这个域可有可无,如果没有设置的话,系统会自动填充一个合理地值。
通常情况下,一个人不可能只拥有一个号码,所以phone
应该是一个集合,这个集合可以是变化的,可为空,你可以想象为一个动态变化的数组,所以它的修饰词是repeated
。
4、在命令模式下进入到protoc.exe的位置,执行下面命令
protoc –java_out=../java ./msg.proto
../java 的意思是 把生成的文件放在哪个位置
./msg.proto 的意思是 执行当前目录的msg.proto