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:\lshdownload\protoc-3.6.1-win32\bin --java_out ./ protoDemo.proto
- protoc,编译命令;
- --proto_path,就是你的proto文件所在目录是哪。我这里是D:\lsh_download\protoc-3.6.1-win32\bin。
- --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();
}
} } - 执行结果如下:
aaarticlea/png;base64,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" alt="" />
- protocol编译器
- 参考资料: