由于业务需要,项目中需要用到google的一种高效的可扩展的结构化数据存储方式protocol buffer(以下简称pb)。很多人可能对这个新东西不熟悉,大家都知道xml,json,确很少听过pb,下面我就粗劣总结一下pb在mac环境下的搭建以及用python解析的简单过程。
首先下载最新pb源码,放到相应的文件夹解压。
安装步骤如下(强调一下:如安装不成功,就以管理员身份安装即在每句命令前加上sudo):
这句如果解压完了就不需要了tar -xzf protobuf-2.1.0.tar.gz
cd protobuf-2.1.0
./configure --prefix=$INSTALL_DIR(要安装的目录,以管理员身份安装可以省去,系统会默认一个位置)
make
make check
make install
如果一切顺利的话,可以用下面语句检测:
protoc --version (会输出版本号,如果提升command not found,那就那烦你重新安装,记着以管理员身份运行)
这些做完之后,我们可以简单的了解一下pb了:
首先我们需要编写一个 proto 文件,定义我们程序中需要处理的结构化数据,在 protobuf 的术语中,结构化数据被称为 Message。proto 文件非常类似 java 或者 C 语言的数据定义。代码清单 1 显示了例子应用中的 proto 文件内容。
清单 1. proto 文件
package lm;
message Person
{
required int32 id = 1; // ID
required string str = 2; // str
optional int32 opt = 3; //optional field
}
|
一个比较好的习惯是认真对待 proto 文件的文件名。比如将命名规则定于如下:
packageName.MessageName.proto
|
在上例中,package 名字叫做 lm,定义了一个消息 helloworld,该消息有三个成员,类型为 int32 的 id,另一个为类型为 string 的成员 str。opt 是一个可选的成员,即消息中可以不包含该成员。
接下来我们编译这个proto文件试试,看能不能成功:
假设您的 proto 文件存放在 $SRC_DIR 下面,您也想把生成的文件放在同一个目录下,则可以使用如下命令:
protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/a.proto
如果你地址写对了,并且文件名不以数字等非法字符开头的话,你应该正在乐着了。你应该在你的
$DST_DIR目录下看到多了一个文件,a_pb2.py,打开看看,其中有一部分你应该没有问题吧,
至少你上面写的pb中的那几个属性能找到吧,还有class,不说了,注意,下面才是关键:
编译完之后怎么用了,要是不会用,那上面不就白干了吗?
我们自定义一个text.py文件,代码如下:
import a_pb2 p = a_pb2.Person() #print p.__doc__ p.name = "gtts" # name应该很熟悉了吧
print p.name
运行这段代码,悲剧的是报错了:No module named google.protobuf
怎么解决了,好像我们缺少东西,解决方法如下:
执行 python setup.py install进行安装,一般可能需要如“setuptools-0.6c11-py2.6.egg”的文件,将其拷贝到上述python目录,
【如果可以连外网,则可省略上一步】确认安装好的命令为sudo python ./setup.py test (别忘了sudo,不然你成功不了的)
如果配置成功的话,提示如下:
---------------------------------------------------
............省略很多字...........
Ran 193 tests in 0.520s
OK
----------------------------------------------------
好了,庆贺吧!
|
分享到:
相关推荐
Protocol Buffer(简称protobuf)是Google开发的一种数据序列化协议,它是跨平台、语言无关的,用于结构化数据的高效序列化方法。protobuf提供了一种方式将数据结构定义为.proto文件,然后可以使用protobuf编译器...
1. 语言中立:Protocol Buffer 可以在不同的语言和平台之间进行数据交换,例如 Java、C++、Python 等。 2. 平台中立:Protocol Buffer 可以在不同的平台之间进行数据交换,例如 Linux、Windows、Android 等。 3. 可...
2. **编译器**:`protoc`是Protocol Buffer提供的编译器,它可以将.proto文件编译成不同编程语言(如C++、Java、Python等)的源代码,生成的类库提供了序列化和反序列化的接口。 3. **序列化与反序列化**:Protocol...
为了使用Protocol Buffer编译工具包,你需要先安装对应版本的protoc,然后编写.proto文件定义数据结构,最后通过命令行调用protoc生成所需的源代码。一旦完成这一步,你就可以在项目中导入生成的类,利用PB提供的API...
Protocol Buffer允许接收端在不知道所有字段的情况下解析数据,只需处理它理解的字段即可。 三、Protocol Buffer的优点 1. **效率**:Protocol Buffer的序列化/反序列化速度远超XML或JSON,且生成的文件体积小,...
然后通过快捷键`Ctrl+Shift+P`(Windows/Linux)或`Cmd+Shift+P`(Mac)打开命令面板,输入`Package Control: Install Package`,搜索并选择"Protocol Buffer Syntax"进行安装。 3. **插件功能**:安装完成后,...
- **Protocol Buffer**是一种用于数据序列化的高效工具,支持多种编程语言(如Java、C++、Python等),能够实现数据的有效存储和传输。 #### 二、概念与工作原理 1. **概念介绍** - **Protocol Buffer**:一种...
这些库文件允许Cocos2d-x应用解析和生成Protocol Buffer定义的二进制数据格式。 "头文件"指的是Protocol Buffer的接口声明,开发者可以在C++代码中包含这些头文件来使用Protocol Buffer的功能。头文件包含了...
4. **跨平台和跨语言兼容性**: Protocol Buffer 3.0 改进了跨平台和跨语言的兼容性,不仅支持C++,还支持Java、Python等多种编程语言。这意味着定义的数据结构可以在不同语言的系统之间无缝共享。 5. **性能优化**:...
为了减小通信开销和提高同步效率,使用Protocol Buffer的优势就显现出来了:它的数据压缩性好,传输速度快,且解析效率高,这些都是移动互联网环境下非常重要的特性。 Protocol Buffer的工作原理是,开发者首先定义...
Protocol Buffer 2.5.0 jar包
4. **兼容性**:Protocol Buffer设计时考虑了向前兼容和向后兼容,这意味着即使在更新.proto文件添加新字段后,旧的序列化数据也能被新的代码正确解析。 5. **效率**:相比于XML或JSON,Protocol Buffer的数据格式...
**Python调用序列化数据工具Protocol Buffers(protobuf)详解** Protocol Buffers是Google开发的一种高效的数据序列化协议,它允许开发者将结构化的数据串行化,可用于数据存储、通信协议等方面。Python作为一门...
2. **处理速度**:Protocol_Buffer的数据解析和序列化速度远超XML。 3. **灵活性**:Protocol_Buffer支持动态添加字段而无需改变现有应用的结构,这在XML中很难做到。 #### 一点历史 Protocol_Buffer最初由Google...
Protocol Buffer技术是Google开发的一种数据序列化协议,用于高效地编码和解码结构化数据。在C++中,Protocol Buffer提供了强大的工具`protoc`,用于将`.proto`文件转换为对应编程语言(如C++)的源代码,使得开发者...
它提供了强大的数据描述语言,开发者可以在.proto文件中定义数据结构,然后 Protocol Buffer 编译器会根据这些定义生成对应语言(如C++、Java、Python等)的源代码,便于在代码中使用。这些数据结构不仅可以在本地...
### Protocol Buffer 配置及实例详解 #### 一、Protocol Buffers 概述 Protocol Buffers 被定义为一种数据描述语言(Data Description Language,DDL),它在 Google 内部得到了广泛的应用,主要用于结构化数据的...
Protocol Buffer(简称protobuf)是Google开发的一种数据序列化协议,它是Google的一种高效、灵活且跨平台的数据交换格式。Protocol Buffers的设计目标是为了提供一种简单、快速、可扩展的方式来存储和传输结构化...