Archive for July 8th, 2008

google protobuf基本分析

Tuesday, July 8th, 2008

安装尝试了一下,谈一下感受:

 

1、该库是C/C++编写的。编译过程缓慢,看来规模庞大。

2、写好的.proto文件仅仅是一个格式定义文件。需要用protoc编译器将其编译为C++/Python/Java的代码,我测试过程编译为Python代码。

3、生成的源码文件为标准的Python源码,包含了.proto中同等意义的类定义,可以方便的进行属性赋值。

4、可以通过对象的SerializeToString()方法输出串行化数据。经分析串行化数据是语言无关的。

 

一个简单的串行化数据示例:

 

‘\n\x02hi\x10\x1d\x1a\x0ehliu@tudou.com’

 

这是Python例子中提供的一处,可以看到是二进制编码格式,此数据并不具有XML的传输过程中仍然可读的特点。不过性能是可以保证的。按照.proto定义的数据来定位每个字段。每个字段前加上了后面数据的长度。对于数字也是使用二进制编码,不过我没有分析出其使用的字节序。

 

总结:

 

1、性能足够高

2、可以提供C++/Python/Java三种语言之间的数据共享

3、串行化数据传输过程中不可读

4、串行化数据中没有见到校验字段

5、历史上出现过无数种二进制数据传输标准,估计有google推荐的东西会传播的广一些