protobuf示例

简介: Google protobuf 是一个高性能的序列化结构化数据存储格式的接口描述语言,具有多语言支持,协议数据小,方便传输,高性能等特点。通过将结构化数据序列化(串行化)成二进制数组,并将二进制数组反序列化成数据对象。

Google protobuf 是一个高性能的序列化结构化数据存储格式的接口描述语言,具有多语言支持,协议数据小,方便传输,高性能等特点。通过将结构化数据序列化(串行化)成二进制数组,并将二进制数组反序列化成数据对象。用于取代JSONXML,作为服务器通信协议。google 将protobuf协议用于 RPC 系统和持续数据存储系统。Protobuf 的主要优点就是:简单,快。

1.首先我们需要编写一个 proto 文件,定义我们程序中需要处理的结构化数据,在 protobuf 的术语中,结构化数据被称为 Messageproto 文件非常类似 java 或者 C 语言的数据定义。

package lm;

message helloworld

{

required int32     id = 1;  // ID

required string    str = 2;  // str

optional int32     opt = 3;  //optional field

}

2.编译

protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto

3.应用示例

writer-写入磁盘

#include "lm.helloworld.pb.h"

int main(void)

{

lm::helloworld msg1;

msg1.set_id(101);

msg1.set_str(“hello);

// Write the new address book back to disk.

fstream output("./log", ios::out | ios::trunc | ios::binary);

if (!msg1.SerializeToOstream(&output))

{

cerr << "Failed to write msg." << endl;

return -1;

}        

return 0;

}

reader-从磁盘读入

#include "lm.helloworld.pb.h"

void ListMsg(const lm::helloworld & msg) {

cout << msg.id() << endl;

cout << msg.str() << endl;

}

int main(int argc, char* argv[]) {

lm::helloworld msg1;

{

fstream input("./log", ios::in | ios::binary);

if (!msg1.ParseFromIstream(&input)) {

cerr << "Failed to parse address book." << endl;

return -1;

}

}

ListMsg(msg1);

}

5.缺点

Protbuf 与 XML 相比也有不足之处。它功能简单,无法用来表示复杂的概念。XML 已经成为多种行业标准的编写工具,Protobuf 只是 Google 公司内部使用的   工具,在通用性上还差很多。

由于文本并不适合用来描述数据结构,所以 Protobuf 也不适合用来对基于文本的标记文档(如 HTML)建模。另外,由于 XML 具有某种程度上的自解释性,它可以被人直接读取编辑,在这一点上 Protobuf 不行,它以二进制的方式存储,除非你有 .proto 定义,否则你没法直接读出 Protobuf 的任何内容

原文

java使用示例

http://blog.csdn.net/lovexiaozeng336/article/details/8187519

http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/

https://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking

目录
相关文章
|
机器学习/深度学习 缓存 并行计算
NVIDIA Tesla GPU系列P4、T4、P40以及V100参数性能对比
NVIDIA Tesla系列GPU适用于高性能计算(HPC)、深度学习等超大规模数据计算,Tesla系列GPU能够处理解析PB级的数据,速度比使用传统CPU快几个数量级,NVIDIA Tesla GPU系列P4、T4、P40以及V100是Tesla GPU系列的明星产品,云服务器吧分享NVIDIA.
78440 1
|
9月前
|
机器学习/深度学习 人工智能 数据安全/隐私保护
免费交互式大模型在线图像去除水印.擦除.替换和增强照片项目代码(免费在线图像修复工具)
免费交互式大模型在线图像去除水印.擦除.替换和增强照片项目代码(免费在线图像修复工具)
|
安全 开发工具 git
CTF工具隐写分离神器Binwalk安装和详细使用方法
CTF工具隐写分离神器Binwalk安装和详细使用方法
2109 0
|
应用服务中间件 Linux API
acme.sh 快速实现 https 证书颁发与自动续期
借助acem.sh来迅速实现 let's encrypt 的泛域名 ssl 证书颁发与续期,基本上五分钟就可以解决战斗
3250 0
|
9月前
|
存储 设计模式 算法
【C++ 泛型编程 高级篇】 C++ 17 解析std::apply 的多种应用场景(一)
【C++ 泛型编程 高级篇】 C++ 17 解析std::apply 的多种应用场景
321 0
|
SQL JavaScript 前端开发
GitHub标星11.9k兼职项目!基于SpringBoot + VUE电商-分销商城系统
商城系统支持商家入驻,后端基于SpringBoot 研发,前端使用 Vue、uniapp开发, 系统全端全部代码开源 前后端分离,支持分布式部署,支持Docker,各个API独立,并且有独立的消费者。
|
索引 Python
获取dataframe的第一行
在pandas中,可以使用`iloc`函数获取dataframe的第一行。以下是一个例子
836 0
|
前端开发 JavaScript API
react 如何创建全局变量
在 React 应用中创建全局变量一般有两种方式: 常规 JavaScript 方式
1599 0
|
前端开发 JavaScript API
移动端、第三方集成应用内置浏览器里如何调试前端代码?
移动端、第三方集成应用内置浏览器里如何调试前端代码?
950 0
|
NoSQL Linux C语言
Linux调试工具strace和gdb常用命令小结
strace和gdb是Linux环境下的两个常用调试工具,这里是个人在使用过程中对这两个工具常用参数的总结,留作日后查看使用。 strace调试工具 strace工具用于跟踪进程执行时的系统调用和所接收的信号,包括参数、返回值、执行时间。
1426 0

热门文章

最新文章