google protocol buffer的使用和原理
- 概况:
- Protocol Buffers(也就是protobuf)是谷歌的语言中立的、平台中立的、可扩展的用于序列化结构化的数据;
- windows环境下的安装与使用:
- protocol编译器
- 安装。安装protocol编译器,用来编译.proto文件;
- 下载。路径:https://github.com/google/protobuf/releases。里面有windows版的:protoc-3.6.1.win32.zip。
- 安装。
- 下载完解压后,如果不想安装,可直接在cmd窗口进入解压得到的bin目录操作。
- 安装,把bin目录copy下来,放到操作系统环境变量的path变量后面。
- 使用。
- 自己编写proto文件。例如我这里写的文件:
message demo{ required int32 id = 1; required string name = 2; optional string email = 3; repeated string friends = 4; }
- 编译:
- 编译结果挺恶心的,一个只有几行代码的文件,编译结果动不动就是几千行几万行。。。
- 编译命令示例:protoc --protopath D:lshdownloadprotoc-3.6.1-win32in --java_out ./ protoDemo.proto
- protoc,编译命令;
- --proto_path,就是你的proto文件所在目录是哪。我这里是D:lsh_downloadprotoc-3.6.1-win32in。
- --java_out,标识输出的java文件应该放在哪个目录。这里的 ./ 是指当前目录。
- protoDemo.proto,就是我们要编译的文件。
- 自己编写proto文件。例如我这里写的文件:
- 安装。安装protocol编译器,用来编译.proto文件;
- 关于protoc命令参数,大家可以在cmd窗口输入protoc --help 然后回车得到。
- 安装protobuf,这里我选择maven安装。
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.6.0</version> </dependency>
- protobuf API的使用:
- java文件,如上.proto文件得到的.java文件,我的文件名是ProtoDemo.java.
- 调用API做什么?
- 序列化;
- 反序列化。
- 编写序列化和反序列化代码如下:
package demo.protobuf; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import demo.protobuf.ProtoDemo.demo.Builder; public class SerialAndDesial { public static void main(String[] args) { Builder b = ProtoDemo.demo.newBuilder(); b.setEmail("dave_peter@foxmail.com"); b.setId(1); b.setName("lsh"); ProtoDemo.demo protoDemo = b.build(); FileOutputStream output; try { //write output = new FileOutputStream("proto.ser"); protoDemo.writeTo(output); output.close(); //read ProtoDemo.demo protoDemo2 = ProtoDemo.demo.parseFrom(new FileInputStream("proto.ser")); System.out.println(protoDemo2); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
- 执行结果如下:
- protocol编译器
- 参考资料: