protobuf
1. 概述
protobuf(Protocol Buffers )是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。相比于Json,Protobuf有更高的转化效率,时间效率和空间效率都是JSON的3-5倍。
由于谷歌官方网站已经不再提供源代码下载,可以去以下地址下载。 Protobuf源代码下载地址:https://github.com/mgravell/protobuf-net
特点:
- 结构数据串行化,灵活、高效、自动。
- 相对XML,更小、更快、更简单。
- 自定义数据结构。
- 动态更新数据结构。
2、protobuf有什么?
Protobuf 提供了C++、Java、Python语言的支持,提供了windows(proto.exe)和Linux平台动态编译生成proto文件对应的源文件。proto文件定义了协议数据中的实体结构(message ,field)
关键字message: 代表了实体结构,由多个消息字段(field)组成。
消息字段(field): 包括数据类型、字段名、字段规则、字段唯一标识、默认值
数据类型:常见的原子类型都支持(在FieldDescriptor::kTypeToName中有定义)
字段规则:(在FieldDescriptor::kLabelToName中定义)
required:必须初始化字段,如果没有赋值,在数据序列化时会抛出异常
optional:可选字段,可以不必初始化。
repeated:数据可以重复(相当于java 中的Array或List)
字段唯一标识:序列化和反序列化将会使用到。
默认值:在定义消息字段时可以给出默认值。
2、利用protoGen将proto文件转换成C#
(1)将proto文件放在protoGen文件夹根目录下面。
(2)打开命令提示符,进入protoGen文件夹根目录。
(3)执行命令protogen.exe -i:xxx.proto -o:xxx.cs
有import类型的 Proto文件的生成方法:
import "game_character.proto";
有import类型的 Proto文件,将基础文件,和import文件同时放在 根目录下, 命令行下运行protogen.exe
cd /d E:\ProtoGen
\protogen.exe -i:Name.proto -o:E:\ProtoGen\Name.cs
//新方法
需要导入的文件必须放在ProtoGen 根目录下面,不要放在proto里, 可以直接批处理