protobuf 序列化 反序列接口
来源:互联网 发布:网络教育专升本报名 编辑:程序博客网 时间:2024/05/16 06:55
上次说过一次protobuf http://blog.csdn.net/kai8wei/article/details/62230878 这次想说一点稍微复杂的但是十分常用的protobuf操作 这里主要介绍一些 protobuf常见的序列化接口
包括 C数组序列化与反序列化 ,文件描述符序列化与发序列化 ,string类的序列化与反序列化 ,C++ stream 序列化和反序列化
你也可以在/usr/local/include/google/目录下,查找包含"SerializeToArray"所有的文件,同时打印所在行
grep "SerializeToArray" -r /usr/local/include/google/ -n 来查找 你要的接口 改变关键字就可以
C数组序列化和反序列化接口bool SerializeToArray(void* data, int size) const; //序列化bool ParseFromArray(const void* data, int size); //反序列化文件描述符序列化与发序列化 bool SerializeToFileDescriptor(int file_descriptor) const; //序列化bool ParseFromFileDescriptor(int file_descriptor); //反序列化string类的序列化与反序列化 bool SerializeToString(string* output) const; //序列化bool ParseFromString(const string& data); //反序列化C++ stream 序列化和反序列化bool SerializeToOstream(ostream* output) const;//序列化 bool ParseFromIstream(istream* input); //反序列化下面我们来使用一个稍微复杂的例子 来使用protobuf的接口
//msg.protopackage demo;message data_t{required int32 data_int_info = 1;required string name = 2;}message kv_t{required int32 key = 1;required string value = 2;}message msg{required int32 int_info = 1;required string string_info = 2;required data_t data_info = 3;optional string opt_info = 4; //can selectrepeated kv_t vector_info = 5;}
//protobuf_demo.cc#include"msg.pb.h"#include<iostream>#include<string>using namespace std;int main(int argc,char *argv[]){demo::msg writer;writer.set_int_info(1);writer.set_string_info("i am wk");demo::data_t* data1 = writer.mutable_data_info();data1->set_data_int_info(2);data1->set_name("wk");for (int i=0;i<5;++i) {demo::kv_t* data2 = writer.add_vector_info();data2->set_key(i);data2->set_value("hello");}//C++string序列化和序列化API//客户端格式化信息string in_data;writer.SerializeToString(&in_data);//下面用一个临时的string 表示在网络中进行传输的过程//真是的过程中你可以借助相应的网络框架对数据进行传输//客户端将数据放到网络上string tmp=in_data;//模拟服务端从网络上拿数据string out_data=tmp;//服务端反格式化信息demo::msg reader;reader.ParseFromString(out_data);cout<<"int_info: "<<reader.int_info()<<endl;cout<<"string_info: "<<reader.string_info()<<endl;demo::data_t * data3 = reader.mutable_data_info();cout<<"data_t {\n";cout<<"data_int_info: "<<data3->data_int_info()<<endl;cout<<"name: "<<data3->name()<<endl;cout<<"}\n";for (int i=0;i<reader.vector_info_size();++i) {cout<<"kv_t {\n";const demo::kv_t &data4 = reader.vector_info(i);cout<<"key: "<<data4.key()<<endl;cout<<"value: "<<data4.value()<<endl;cout<<"}\n";}return 0;}
//编译的脚本protoc --cpp_out=. msg.proto #生成对应的msg.pb.h和msg.pb.cpp文件g++ protobuff_demo.cc msg.pb.cc -o protobuff_test -lprotobuf./protobuff_testrm -rf ./protobuff_test msg.pb.cc msg.pb.h
其实所有的接口 都是将消息序列化后从一个服务或者机器上放到另一个缓冲区中 网络也可抽象成一个缓冲区 其实内核网络缓冲区就是 之后通过网络发送到另一个 机器上的缓冲区中 再次反序列化解析出来
阅读全文
0 0
- protobuf 序列化 反序列接口
- protobuf入门教程(三):常用序列化/反序列化接口
- protobuf入门教程(三):常用序列化/反序列化接口
- java中使用protobuf序列化(反序列化)
- ProtoBuf 常用序列化/反序列化API
- java中使用protobuf序列化(反序列化)
- ProtoBuf 常用序列化/反序列化API
- ProtoBuf 常用序列化/反序列化API
- ProtoBuf 常用序列化/反序列化API
- protobuf 常用序列化/反序列化 api
- protobuf 的序列化与反序列化
- ProtoBuf 常用序列化/反序列化API
- ProtoBuf 常用序列化/反序列化API
- google protobuf入门(序列化和反序列化)
- Lua 中实现 protobuf 序列化,反序列化
- protobuf的序列化与反序列化
- 使用protoBuf进行序列化和反序列化
- ProtoBuf 常用序列化/反序列化API
- 使用FIELD SYMBOL 动态指定OLE的输出值
- ZooKeeper伪分布式安装和常规使用
- phpcms常用标签
- Python的安装
- 代码技巧
- protobuf 序列化 反序列接口
- java普通类模拟枚举实现原理
- GlusterFS文件系统弹性哈希算法
- WPF无边框窗口鼠标拖动缩放大小
- VM编辑器常用命令
- JS中字符串的方法
- Android开发:Handler异步通信机制全面解析(包含Looper、Message Queue)
- mysql
- poj 3150 Cellular Automaton(迷糊,但原理是用的快速幂)