准备工作
unity 2019.4.x
Protobuff 3.20.3
Protobuf是用来干什么的?
Protobuf是Protocol Buffers的简称,它是Google公司开发的一种数据描述语言,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化 。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。proto2中提供了 C++、Java、Python 三种语言的 API。在proto3中支持所有的语言!
主要用于(数据)通信协议、数据存储等。
Protobuf的优势
Protobuf 有如 XML和Json,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。只需使用 Protobuf 对数据结构进行一次描述,即可利用各种不同语言或从各种不同数据流中对你的结构化数据轻松读写。
它有一个非常棒的特性,即“向后”兼容性好,人们不必破坏已部署的、依靠“老”数据格式的程序就可以对数据结构进行升级。这样您的程序就可以不必担心因为消息结构的改变而造成的大规模的代码重构或者迁移的问题。因为添加新的消息中的 field 并不会引起已经发布的程序的任何改变。
Protobuf 语义更清晰,无需类似 XML 解析器的东西(因为 Protobuf 编译器会将 .proto 文件编译生成对应的数据访问类以对 Protobuf 数据进行序列化、反序列化操作)。
使用 Protobuf 无需学习复杂的文档对象模型,Protobuf 的编程模式比较友好,简单易学,同时它拥有良好的文档和示例,对于喜欢简单事物的人们而言,Protobuf 比其他的技术更加有吸引力。
下载与安装
这里下载3.20.3
Google Protobuff下载
下载好之后解压到你的固定文件夹里!
主要基础类型(其他可以自行查阅)
.proto类型 | java类型 | C++类型 | 备注 |
---|---|---|---|
double | double | double | |
float | float | float | |
int32 | int | int32 | 使用可边长编码方式。编码负数时不够高效,如果该字段可能有负数,用sint32 |
sint32 | long | int32 | 使用可边长编码方式。有符号的整型值。编码时比int32高效 |
sint64 | long | int64 | 使用可边长编码方式。有符号的整型值。编码时比int62高效 |
string | String | string | 一个字符串必须时UTF8或7-bit ASCII编码文本 |
bool | boolean | bool |
特殊字段
英文 | 中文 | 备注 |
---|---|---|
enum | 枚举(数字从零开始)作用时为字段指定某“一定义值序列” | enum Sex{Man=0;Women=1} |
message | 消息体,C#中的class | messge User{} |
repeated | 数组或集合 ,C# List OR [ ] | repeated User user= 0 |
// | 注释 | //此处为注释 |
extend | 扩展 | extend User{} |
package | 包名 | C#中的命名空间,防止命名冲突 |
编写.proto文件
我们在刚才解压的文件夹里找到bin文件夹
新建txt文本取名Person.proto,切记后缀.txt改为.proto
输入一下代码
syntax&