版权声明:本文为博主原创文章,未经博主允许不得转载。
本文纯个人学习笔记,由于水平有限,难免有所出错,有发现的可以交流一下。
一、Protobuf 介绍
google 开源项目。序列化数据结构的方案(Json 、XML 也是),通常用于编写需要数据交换或者需要存储数据的程序。这套方案包含一种用于描述数据结构的接口描述语言(Interface Description Language)和一个生成器,用于生成描述该数据结构的不同编程语言的源代码。
序列化与反序列化:
序列化 : 将数据结构或对象转换成二进制串的过程
反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程
优缺点:
总结:
Protobuf 比 XML、Json 更小,更快,使用和维护更简单,但是使用范围不够广。
二、Protobuf 使用
我们可以参照 Protobuf 官网 的指南进行尝试。选择 Basics: Java 查看 java 语言的用法。
1. 在 main 文件夹下新建 proto 文件夹。
2. 在 proto 文件夹下新建 test.proto 文件。
3. 从官网拷贝 demo 代码到 test.proto 文件。
//使用 proto2,目前有 proto2 和 proto3 这两个版本,他们语法有些不同,内核实现也有所区别。
syntax = "proto2";
package tutorial;
//生成 java 源文件的包名
option java_package = "com.example.tutorial";
//生产 java 源文件的类名
option java_outer_classname = "AddressBookProtos";
//message 相当与 java 的 class
message Person {
//required 必须设置(不能为null)
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
//repeated 重复的(也就是指集合)
repeated PhoneNumber phones = 4;
}
message AddressBook {
repeated Person people = 1;
}
这是一段 protobuf 的源文件,我们需要使用 protobuf 的编译器进行编译。
4. 编译 protobuf 代码,这