Google Protobuf 是语言无关, 平台无关, 可扩展的序列化结构数据的方法, 它可用于 (数据) 通信协议, 数据存储等.
可高效, 自动序列结构数据, 相比与 XML, JSON, 消息更小, 传输更快.
支持 Java, C#, C++, Go 和 Python.
通过 .proto 文件定义数据结构, 之后通过 protoc 工具编译生成多语言版本的源码.
可以更新数据结构, 而不破坏由旧数据结构编译的已部署程序.
1. 使用
- 从
https://github.com/protocolbuffers/protobuf/releases 下载编译器
1 2 3 4 5 6 7 8 9 10
| axel -n 10 -a https://github.com/protocolbuffers/protobuf/releases/download/v3.13.0/protobuf-all-3.13.0.tar.gz
tar -axf protobuf-all-3.13.0.tar.gz
cd protobuf-all-3.13.0 ./configure --prefix=/usr/local/protobuf
make make check make install
|
然后设置环境参数
1
| export LD_LIBRARY_PATH=/usr/local/lib
|
.proto 文件
大致格式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| message Type { [字段规则] 字段类型 字段名称 = 字段序号; }
字段规则: required: 字段只能也必须出现 1 次 optional: 字段可出现 0 次或1次 repeated: 字段可出现任意多次(包括 0) 类型: int32、int64、sint32、sint64、string、32-bit .... 字段编号: 不可变且唯一, 0 ~ 536870911(除去 19000 到 19999 之间的数字)
样例:
```proto syntax = "proto3";
// 指定 package option java_package = "com.raven.play.protobuf.message";
message Person { int32 id = 1; string name = 2;
repeated Phone phone = 4;
enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; }
message Phone { string number = 1; PhoneType type = 2; } }
|
- 编译
1 2 3 4 5 6
| protoc --java_out=$target_path --java_package=$target_package $proto_file
protoc -I=$source_paths --java_out=$target_path --java_package=$target_package *.proto
|
package 路径是配置在 .proto 文件里的
- 使用
Maven 依赖:
1 2 3 4 5 6 7 8 9 10 11
| <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.13.0</version> </dependency>
<dependency> <groupId>com.googlecode.protobuf-java-format</groupId> <artifactId>protobuf-java-format</artifactId> <version>1.4</version> </dependency>
|
2. Resource