Protocol Buffer
Protobuf基础概念
Protobuf是google开发的数据结构描述语言,能够将结构化数据序列化与反序列化,取代json和xml,常用于服务器通信协议、RPC系统和数据持久化存储系统中。
优点:高性能,数据协议小,平台无关,语言无关,向前和向后兼容
缺点:通用性比XML差,以二进制存储,无法直接读取出protobuf的内容。
Protobuf在应用场景之一
客户端程序是使用Java开发的,可能运行自不同的平台,如:Linux、Windows或者是Android,而我们的服务器程序通常是基于Linux平台并使用C++开发完成的。在这两种程序之间进行数据通讯时存在多种方式用于设计消息格式。
Protobuf字段类型对应
Protobuf type |
java type |
c++ type |
protobuf type describe |
bool |
boolean |
bool |
|
bytes |
ByteString |
string |
可包含任意顺序的字节数据。 |
double |
double |
double |
|
float |
float |
float |
|
int32 |
int |
int32 |
使用可变长编码方式。编码负数时不够高效如果字段负数,那么使用sint32更高效 |
int64 |
long |
int64 |
使用可变长编码方式。编码负数时不够高效如果字段含有负数,那么使用sint64。 |
uint32 |
int |
uint32 |
使用可变长编码方式 |
unint64 |
long |
uint64 |
使用可变长编码方式 |
sint32 |
int |
int32 |
使用可变长编码方式。有符号的整型值。编码时比通常的int32高效 |
sint64 |
long |
int64 |
使用可变长编码方式。有符号的整型值。编码时比通常的int64高效 |
int |
uint32 |
总是4个字节。如果数值总是比2的28次方大的话,这个类型会比uint32高效 |
|
fixed64 |
long < |