Google 的protocol buffer开源了,早就听说了google的protocol buffer了。Protocol Buffer 是google内部非常重要的数据序列化和反序列化的工具。Protocol buffer可以用来定义结构化的数据,据说google内部所有的结构化数据都是用protocol buffer 来保存的,比如我们在google上做一次搜索,google的后台就会通过protocol buffer
来互相通信,和读取相关的数据。可以看出protocol buffer对于google来说是很重要的,其实很像xml的功能,所以拿出来比较一下:
一 都可以用来定义结构化数据,protocol buffer 更简单
如果我们要xml来定义结构化数据,通常我们会这样:
<struct>
<field type="int">1<field>
<field type="stirng">a<field>
</struct>
如果使用protocol buffer,可以这样做:
message struct {
required int32 field1;
required string field2;
}
可以看出google的protocol buffer预定义了一些类型,常用类似于C的struct的语法来定义结构化数据。这里我们可以看出,protocol buffer 更实用
二 序列化
protocol buffer 可以在硬盘上保存结构化的数据,不同的系统都可以读取,比如 C++生成一个protocol buffer,并将其写入到硬盘, 另一个JAVA程序就可以读取了。 XML 那就不同说了,C++ java都可以解析和生成。protocol buffer主要是比较高效,据说大小是同样功能XML的30%, 解析速度是XML的20~100倍!牛啊。。
三 RPC
Xml-rpc 使用XML来交换数据,比如soap, web service。我个人觉得xml-rpc的效率比较低。我们也可以使用protocol buffer 来作为rpc的数据格式
来互相通信,和读取相关的数据。可以看出protocol buffer对于google来说是很重要的,其实很像xml的功能,所以拿出来比较一下:
一 都可以用来定义结构化数据,protocol buffer 更简单
如果我们要xml来定义结构化数据,通常我们会这样:
<struct>
<field type="int">1<field>
<field type="stirng">a<field>
</struct>
如果使用protocol buffer,可以这样做:
message struct {
required int32 field1;
required string field2;
}
可以看出google的protocol buffer预定义了一些类型,常用类似于C的struct的语法来定义结构化数据。这里我们可以看出,protocol buffer 更实用
二 序列化
protocol buffer 可以在硬盘上保存结构化的数据,不同的系统都可以读取,比如 C++生成一个protocol buffer,并将其写入到硬盘, 另一个JAVA程序就可以读取了。 XML 那就不同说了,C++ java都可以解析和生成。protocol buffer主要是比较高效,据说大小是同样功能XML的30%, 解析速度是XML的20~100倍!牛啊。。
三 RPC
Xml-rpc 使用XML来交换数据,比如soap, web service。我个人觉得xml-rpc的效率比较低。我们也可以使用protocol buffer 来作为rpc的数据格式