为什么使用Protocol Buffers?
一个非常简单的 “address book” 应用例子,它可以从文件读取和向文件写入人们的联系人详情。地址簿中的每个人具有一个名字 (name),ID,电子邮件地址 (email address),和联系人电话号码 (contact phone)。你要如何序列化和提取这样的结构化数据呢?有一些方法可以解决这个问题:
原始的内存数据结构可以以二进制的形式发送/保存。随着时间的流逝,这是一种脆弱的方法,因为接收/读取的代码必须以完全相同的内存布局、尾端等等编译。此外,随着文件以原始的格式累积数据及处理那种格式的软件的复制,那种格式被不断传播,则它是非常难以扩展的格式。
你可以发明一种特别的方式来将数据项编码编码为一个字符串 —— 比如将4个int值编码为”12:3:-23:67”。这是一个简单而灵活的方法,尽管它需要编写一次性的编码和解析代码,而且解析消耗一小段运行时代价。这对于编码非常简单的数据是最好的方式。
将数据序列化为XML。这种方法可能非常具有吸引力,因为XML是 (有点) 人类可读的,而且它有大量编程语言的bindings库。如果你想要与其它的应用/项目共享数据的话,这可能是一个很好的选择。然而,XML是臭名昭著的空间密集,而且编码/解码它需要消耗应用大量的性能开销。而且,浏览一个XML DOM树也被认为比通常浏览类中的简单字段更复杂。
Protocol buffers是解决这个问题灵活,高效,自动化的方案。通过 Protocol buffers ,你可以编写一个 .proto 描述你想要存储的数据结构。通过它, Protocol buffers 编译器创建一个类,以一种高效的二进制格式实现自动的编码和解析 Protocol buffers 数据。生成的类为构成一个 Protocol buffers 的字段提供了getters和setters方法,并处理读取和写入 Protocol b