转载:

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
输出:

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

Protocol Buffers安装与简单使用相关推荐

  1. Protocol Buffers 在 iOS 中的使用

    翻译自:Introduction to Protocol Buffers on iOS 对大多数的应用来说,后台服务.传输和存储数据都是个重要的模块.开发者在给一个 web service 写接口时, ...

  2. 在Android中使用Protocol Buffers

    网络性能优化的终极手法就是不通过网络传输,但这常常是不可能的.但我们还是可以通过对网络传输的数据本身做优化,来获得更好的性能,性能就应该从每一个可能的地方榨取.这里来看一下 Protocol Buff ...

  3. 在Java中使用Protocol Buffers

    这份教程为Java开发者提供了使用 Protocol Buffer 的基本介绍.通过创建一个简单的示例应用,它展示了 在 .proto 文件中定义消息格式. 使用 Protocol Buffer 编译 ...

  4. 在C++中使用Protocol Buffers

    下载并编译Protocol Buffer 这份教程为C++开发者提供了使用 Protocol Buffer 的基本介绍.通过创建一个简单应用,它展示了 在 .proto 文件中定义消息格式. 使用 P ...

  5. Google Protocol Buffers 2.3.0 for java 快速开始

    Google Protocol Buffers 2.3.0 for java 快速开始 博客分类: Java JavaGoogleUbuntuLinux数据结构 Protocol Buffers是一个 ...

  6. protocol buffers使用说明

    一.什么是protocol buffers Protocol buffers是一个灵活的.高效的.自动化的用于对结构化数据进行序列化的协议,与XML相比,Protocol buffers序列化后的码流 ...

  7. JSON与Protocol Buffers的一些比较

    转载来源:http://www.cnblogs.com/zhubo/archive/2011/07/06/JSON_And_ProtocolBuffers.html JSON与Protocol Buf ...

  8. ProtoBuf3语法指南(Protocol Buffers)_上

    0.说明 ProtoBuf3语法指南, 又称为proto3, 是谷歌的Protocol Buffers第3个版本. 本文基于官方英文版本翻译, 加上了自己的理解少量修改, 一共分为上下两部分. 1.序 ...

  9. 是时候该了解一波Protocol Buffers了[Java]

    前言 Protocol Buffers,是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储.通信协议等方面. 它不依赖于语言和平台并且可扩展性极强.现阶段官方 ...

最新文章

  1. 大叔手记(17):大叔2011年读过的书及2012年即将要读的书
  2. 【Android】附加Android源代码Androidandroid_gingerbread_javasrc
  3. 《分布式系统:概念与设计》一3.5.2 IEEE 802.11无线LAN
  4. 我的2017与2018
  5. Error loading WebappClassLoader
  6. 【netcore基础】.Net core自动作业之Hangfire
  7. 解决报错 javax.persistence.TransactionRequiredException: Executing an update/delete query
  8. jsonp模拟获取百度搜索相关词汇
  9. Android开发指南中文版(十三)User Interface-Notifications
  10. 如何限制创建子网站时只能使用指定的模板
  11. 分治法求最大和最小值
  12. Ros代码迁移,编译头文件报错解决办法
  13. 「力扣」509. 斐波那契数【动态规划】详解!
  14. windows远程连接linux系统(图文)
  15. main(int argc, char** argv) 参数的含义
  16. 解决cmd命令行乱码问题
  17. 这就是CDN回源原理和CDN多级缓存啊!
  18. 中国农业大学计算机研究生专业课,2020年中国农业大学计算机科学与技术考研经验分享...
  19. 微信企业号回调 java_微信公众平台企业号回调模式的URL验证——Java
  20. OpenSea合约深度解析——atomicMatch_ 篇

热门文章

  1. SWUST OJ#1099(希尔排序算法实现)
  2. CentOS7 NetworkManaer 未运行
  3. @JsonFormat 使用方法
  4. Docker的准备,安装,初体验
  5. 最全Linux常用命令
  6. LeetCode 409. 最长回文串
  7. 基于dockerfile 构建php7.4+parallel
  8. 三星S10的定价脱离现实,或难拯救手机业务
  9. Django REST项目实战:在线中文字符识别
  10. lightroom 闪退_王者荣耀:IOS部分机型闪退问题已解决,更新方法公布