Protocol Buffers,是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。
ProtocolBuffer的优势
跨平台: ProtoBuf支持多平台和语言, 包括C++/Java/Python等等
序列化&反序列号: ProtoBuf支持直接将对象序列化成Data,也支持直接将Data序列化为对象类型
消息大小:一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一.
对于即时通信消息来说,减小数据量的大小非常有必要
使用地址: https://github.com/alexeyxo/protobuf-swift
1.ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2.brew install automake
3.brew install libtool
4.brew install protobuf
5.git clone git@github.com:alexeyxo/protobuf-swift.git
6../scripts/build.sh
syntax = "proto2";
message msgName {
required int32 age = 1;
required string name = 2;
}
syntax = "proto2" 使用的版本号. 目前proto2/ proto3
message 类定义的关键字(这里面称为'消息')
msgName 类定义的名
required 序列化, 反序列化时必须有值
optional 序列化, 反序列化不一定有值
repeated 经常用在数组中
int32/ int64/ string/ 其他数据类型
1. 2.... 代表当前字段在当前类中的位置, 方便在序列化, 反序列化中查找赋值
数据类型
bool布尔类型1字节bool
double64位浮点数Ndouble
float32为浮点数Nfloat
int3232位整数、Nint
uin32无符号32位整数Nunsigned int
int6464位整数N__int64
uint6464为无符号整Nunsigned __int64
sint3232位整数,处理负数效率更高Nint32
sing6464位整数 处理负数效率更高N__int64
fixed3232位无符号整数4unsigned int32
fixed6464位无符号整数8unsigned __int64
sfixed3232位整数、能以更高的效率处理负数4unsigned int32
sfixed6464为整数8unsigned __int64
string只能处理 ASCII字符Nstd::string
bytes用于处理多字节的语言字符、如中文Nstd::string
enum可以包含一个用户自定义的枚举类型uint32N(uint32)enum
message可以包含一个用户自定义的消息类型Nobject of clas
最后一步就是pod 'ProtocolBuffers-Swift'
编译的时候遇到的坑
// 后面必须有;
syntax = "proto2";
// msgName { 中间不能有=
message msgName {
// 数字一定要排序, 而且从1开始, 数字后面必须加; 最后一个数字也必须加;
required int32 age = 1;
required string name = 2;
// } 后面可以加;
}
来源:https://www.cnblogs.com/MrTao/p/7285702.html