Protocol buffers 快速入门(针对 Java 语言)

写在前面

在学习使用 protocol buffers 的时候一开始在网上找一些博客看,遇到的问题是很多博客写的并不清晰看了也是让人一头雾水,没法达到对 protocol buffers 快速上手使用的目的(完成一个 hello world)。然后通过官方文档学习后对 protocol buffers 有了大概的认识,也达到能够应用的程度。建议最好还是去看官网上的文档,描述的很详细。protocol buffers 官网(请科学上网)。

Protocol Buffers 是什么?

Protocol Buffers 简称 protobuf , 由 google 开源。是一中语言中立 , 平台中立 ,(不和特定的语言、操作系统绑定),对结构化数据进行序列化、反序列化的机制。类似于 XML , 比起 XML protobuf 的优点是 :数据占用空间小 , 传输速度快 ,使用起来简单 , 定义一次数据结构,生成指定语言的代码 (目前支持Java 、Python 、C++ 、Objective-C 、Go 、Ruby 、C# 、JavaScript 、PHP 、Dart )。 缺点是可读性不如 XML 。protobuf 不是好的面向对象的设计 , 不能发挥面向对象的特性 , 不应该通过继承向生成的类添加行为, 这会打破内部机制,无论如何都不是很好的面向对象的实践。

开始使用 brotobuf

1. 下载并安装 protobuf compiler (用 C++ 编写),作用是根据定义的 .proto 文件生成指定语言的代码。

这一步有两种方式 :

1. 使用源码自己去编译、安装 (对使用 C++ 的同学来说很简单)。

2. 下载已经编译好的可以直接执行的二进制文件 (对使用非 C++ 的同学来说很方便 ,下载后最好配置到环境变量中)。

2. 根据所使用的语言下载 protobuf 对应的运行时包 , 比如我使用的是 java 语言 , 那么我需要将 protobuf-java (maven 中可以找到) 这个包添加到我的工程内。

第 1 步是和开发环境有关 , 使用 protobuf compiler 生成代码 ,将生成的代码放在自己的应用中。

第 2 步是和运行时有关 , 要在自己的应用中添加 protobuf 对应语言的包。

3. 编写 .proto 文件 ,在 .proto 文件中定义数据结构 , .proto 有定义好的语法规则 。 (我使用的 IDE 是 IDEA , 在 IDEA 中安装了 Protobuf Support 插件 , 可以提供一些诸如语法检查的帮助)。

4. 根据指定的 .proto 文件生成代码 , 这里我生成的是 Java 代码 , 例子 :

cat.proto 文件内容

<code>syntax = "proto2";

package tutorial;

option java_package = "net.j4love.protobuf.demo";
option java_outer_classname = "CatProto";

message Cat {
required int32 id = 1;
required string name = 2;
required string color = 3;
}/<code>

protoPath : .proto 文件所在路径;

codeDestPath : 生成的 java 代码目标路径

protoFilePath : 具体的某个 .proto 文件所在路径

protobuf compiler 命令生成代码 : protoc -I=$protoPath --java_out=$codeDestPath $protoFilePath (protoFilePath 可以同时指定多个,之间用空格隔开)

例子 :

<code>protoc -I=E:/Develop/hepeng/protobuf-demo/src/main/java/net/j4love/protobuf/proto --java_out=E:/Develop/hepeng/protobuf-demo/src/main/java E:/Develop/hepeng/protobuf-demo/src/main/java/net/j4love/protobuf/proto/cat.proto/<code>

使用 Java 代码的生成方式例子 :

<code>
// protobufCompilerPath 是安装的 protobuf compiler 中 protoc.exe 的绝对路径
// 例如 :D:/DevelopmentTools/protobuf compiler/bin/protoc.exe
public static void generateJavaCode(String protobufCompilerPath , String protoPath ,
String codeDestPath , String ... protoFilePaths) {
String protobufCmd = protobufCompilerPath + " -I=" + protoPath + " --java_out=" + codeDestPath + " ";
for (String protoFilePath : protoFilePaths) {
protobufCmd += " " + protoFilePath;
}
System.out.println("protobuf Generate Code Command : " + protobufCmd);
try {
Runtime.getRuntime().exec(protobufCmd);
} catch (IOException e) {

e.printStackTrace();
}
}/<code>

经过这 4 步就可以完成一个 protobuf 的 hello world 了 , 其他详细内容还是建议看官方的文档。

Protocol buffers 快速入门(针对 Java 语言)

码地址。


分享到:


相關文章: