Protocol Buffers安装与简单使用


转载:

http://blog.sina.com.cn/s/blog_740ccd040101hf3z.html



ProtocolBuffers是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。现阶段支持C++、JAVA、Python等三种编程语言。

1、什么是Protocol Buffers
ProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。

2、Protocol Buffers的特点

更简单

数据描述文件只需原来的1/10至1/3

解析速度是原来的20倍至100倍

减少了二义性

生成了更容易在编程中使用的数据访问类



3、Protocol Buffers安装配置

从http://code.google.com/p/protobuf/downloads/list下载

然后./configure   make   makeinstall

安装完毕

ps: ./configure  出现这样的


出现下面的错误
configure: error: C++ preprocessor "/lib/cpp" fails sanitycheck
See `config.log' for more details

这个在ubuntu很常见,这次干脆一下子把常用的库全部下载来
root@ubuntu:/opt/protocbuf/protobuf-2.5.0# apt-get installbuild-essential
到最后可以看到
正在处理用于 man-db 的触发器...
正在设置 libtimedate-perl (1.2000-1) ...
正在设置 libdpkg-perl (1.16.1.2ubuntu7.1) ...
正在设置 dpkg-dev (1.16.1.2ubuntu7.1) ...
正在设置 libalgorithm-diff-perl (1.19.02-2) ...
正在设置 libalgorithm-diff-xs-perl (0.04-2build2) ...
正在设置 libalgorithm-merge-perl (0.08-2) ...
正在设置 libstdc++6-4.6-dev (4.6.3-1ubuntu5) ...
正在设置 g++-4.6 (4.6.3-1ubuntu5) ...
正在设置 g++ (4:4.6.3-1ubuntu5) ...
update-alternatives: 使用 /usr/bin/g++ 来提供 /usr/bin/c++ (c++),于自动模式 中。
正在设置 build-essential (11.5ubuntu2.1) ...

g++处理器已经加入来了
再次配置就没问题了。


运行protoc --version
protoc: error while loading shared libraries:libprotobuf.so.7: cannot open shared object file: No such file ordirectory 




是因为系统找不到lib库 root@roson-vm:/home/protobuf# gedit /etc/ld.so.conf修改如下: include /etc/ld.so.conf.d/*.conf /usr/local/lib 然后ldconfig更新库文件路径

现在运行 protoc--version就正常了
root@roson-vm:/home/protobuf# protoc --version
libprotoc 2.5.0

4、使用
新建proto文件gedit test.proto,如下:
package test;
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}

调用protoc编译器编译接口文件
root@roson-vm:/home/protobuf# protoc test.proto--cpp_out=prototest/
C++用--cpp_out输出,prototest是输出目录
其他语言可以用protoc --help






编写测试程序
root@roson-vm:/home/protobuf# gedit test.cpp
#include "prototest/test.pb.h"
#include <stdio.h>
int main()
{
using namespace test;
Person p;
p.set_name("roson");
p.set_id(1);
p.set_email("roson@danale.com");
std::string str;
p.SerializeToString(&str); // 将对象序列化到字符串
printf("%s\n",str.c_str());
Person test;
test.ParseFromString(str); // 从字符串反序列化
printf("test.email=%s\n", test.email().c_str()); //输出将是roson,说明反序列化正确
return 0;
}

编译:
root@roson-vm:/home/protobuf#g++ -o prototest test.cpp prototest/test.pb.cc-lprotobuf

运行
root@roson-vm:/home/protobuf# ./test

输出:







其中中间的是二进制数字来,这个先不用考虑,可以看到数据正常输出。










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
来源:https://github.com/google/protobuf/releases protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现,如:java、c#、c++、javascript、go 、python、ruby和php等,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。 本资源包含: protobuf-all-3.6.0.tar.gz 8.25 MB protobuf-all-3.6.0.zip 4.25 MB protobuf-cpp-3.6.0.tar.gz 5.18 MB protobuf-cpp-3.6.0.zip 4.57 MB protobuf-csharp-3.6.0.tar.gz 5.66 MB protobuf-csharp-3.6.0.zip 4.7 MB protobuf-java-3.6.0.tar.gz 5.86 MB protobuf-java-3.6.0.zip 4.4 MB protobuf-js-3.6.0.tar.gz 5.43 MB protobuf-js-3.6.0.zip 4.59 MB protobuf-objectivec-3.6.0.tar.gz 5.69 MB protobuf-objectivec-3.6.0.zip 4.6 MB protobuf-php-3.6.0.tar.gz 5.64 MB protobuf-php-3.6.0.zip 4.53 MB protobuf-python-3.6.0.tar.gz 5.57 MB protobuf-python-3.6.0.zip 4.52 MB protobuf-ruby-3.6.0.tar.gz 5.5 MB protobuf-ruby-3.6.0.zip 1.46 MB protoc-3.6.0-linux-aarch_64.zip 1.31 MB protoc-3.6.0-linux-x86_32.zip 1.36 MB protoc-3.6.0-linux-x86_64.zip 2.44 MB protoc-3.6.0-osx-x86_32.zip 2.39 MB protoc-3.6.0-osx-x86_64.zip 984 KB protoc-3.6.0-win32.zip Source code (zip) Source code (tar.gz)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值