【Google Protobuf】windows下protobuf的开发环境搭建和使用
protobuf,protobuf java2016-07-20
Protobuf是由谷歌开源而来,在谷歌内部久经考验。它将数据结构以.proto文件进行描述,通过代码生成工具可以生成对应数据结构的POJO对象和Protobuf相关的方法和属性。
特点如下:
以上是摘自http://blog.163.com/jekyll_zhou@126/blog/static/18204738201210303283975/的测试结果
枚举的定义形式和Java的Enum定义差不多,例如:
enum PhoneType { MOBILE=0; HOME=1; WORK=2; }
message,类似于C语言中的结构体。例如:
message Login { optional string username = 1; optional string password = 2; }
字段名称的命名与C、C++、Java等语言的变量命名方式几乎是相同的。
protobuf建议字段的命名采用以下划线分割的驼峰式。例如 first_name 而不是firstName.
1900~2000编码值为Google protobuf 系统内部保留值,建议不要在自己的项目中使用。
1.创建一个新的工程Protobuf,将protoc.exe文件拷贝到当前目录
2.在protoc.exe同级目录创建helloworld.proto文件,代码如下
message Person { // ID(必需) required int32 id = 1; // 姓名(必需) required string name = 2; // email(可选) optional string email = 3; // 朋友(集合) repeated string friends = 4; }
protoc.exe --java_out=./ helloworld.proto
4.编译后在当前目录多出来一个Helloworld.java文件
5.把Helloworld.java文件和protobuf-java-2.6.1.jar引入到eclipse项目
6.序列化代码
Helloworld.Person.Builder builder = Helloworld.Person.newBuilder(); builder.setId(1); builder.setName("小毛驴"); builder.setEmail("1805348347@qq.com"); Helloworld.Person person = builder.build(); byte[] result = person.toByteArray();
try { Helloworld.Person person1 = Helloworld.Person.parseFrom(result); System.out.println(person1); } catch (InvalidProtocolBufferException e) { // TODO Auto-generated catch block e.printStackTrace(); }
8.运行结果
id: 1
name: "\345\260\217\346\257\233\351\251\264"
email: "1805348347@qq.com"