当前位置: 首页 > news >正文

protobuf的序列反序列化

protobuf的序列反序列化

在消息类的父类 MessageLite 中,提供了读写消息实例的方法,包括序列化方法和反序列化方法。

class MessageLite {
public://序列化:bool SerializeToOstream(ostream* output) const; // 将序列
化后数据写入文件流bool SerializeToArray(void *data, int size) const;bool SerializeToString(string* output) const;//反序列化:bool ParseFromIstream(istream* input); // 从流中读取数
据,再进行反序列化动作bool ParseFromArray(const void* data, int size);bool ParseFromString(const string& data);
};

注意:

序列化的结果为二进制字节序列,而非文本格式。

• 以上三种序列化的方法没有本质上的区别,只是序列化后输出的格式不同,可以供不同的应用场景使用

• 序列化的 API 函数均为 const 成员函数,因为序列化不会改变类对象的内容, 而是将序列化的结果保存到函数入参指定的地址中

序列化与反序列化的使用

• 创建一个测试文件 info.cc,方法中我们实现:

○ 对一个联系人的信息使用 PB 进行序列化,并将序列化结果打印出来

○ 对序列化后的内容使用 PB 进行反序列,解析出联系人信息并打印出来

#include <iostream>
#include "contacts.pb.h"int main()
{contacts::contact conn;conn.set_sn(10001);conn.set_name("小明");conn.set_score(60.5);//持久化的数据放在str对象里面,这时候可以对str进行持久化传输或者网络传输std::string str=conn.SerializeAsString();contacts::contact stu;bool ret=stu.ParseFromString(str);if(ret==false){std::cout<<"反序列化失败!\n";return -1;}std::cout<<stu.sn()<<std::endl;std::cout<<stu.name()<<std::endl;std::cout<<stu.score()<<std::endl;return 0;
}

代码书写完成后,编译 info.cc,生成可执行程序

g++ info.cc contacts.pb.cc -o info -std=c++11 -lprotobuf

○ -lprotobuf:链接 protobuf 库文件

○ -std=c++11:支持 C++11

执行可执行程序,可以看见 people 经过序列化和反序列化后的结果

root@VM-4-5-ubuntu:~/demo/protobuf# ./main
10001
小明
60.5

由于 ProtoBuf 是把联系人对象序列化成了二进制序列,这里用 string 来作为接收二进制序列的容器。所以在终端打印的时候会有换行等一些乱码显示。另外相对于 xml 和JSON 来说,因为 PB 被编码成二进制,破解成本增大,ProtoBuf 编码是相对安全的。


文章转载自:

http://Y0IUL5Bo.xrksf.cn
http://8WgW3zWi.xrksf.cn
http://4eDIKQx5.xrksf.cn
http://2v3d2btj.xrksf.cn
http://1iqlDWJr.xrksf.cn
http://do4VPped.xrksf.cn
http://ucCDGOdf.xrksf.cn
http://oxYETLwM.xrksf.cn
http://Yz22a3QP.xrksf.cn
http://Qn5SgHzi.xrksf.cn
http://lR3mNVju.xrksf.cn
http://MMTEnSHQ.xrksf.cn
http://lpccUYa5.xrksf.cn
http://XJrLjtaT.xrksf.cn
http://SmTxQAgy.xrksf.cn
http://NONuqpr1.xrksf.cn
http://TnElkTqX.xrksf.cn
http://ihq4vHcn.xrksf.cn
http://m5I2pce4.xrksf.cn
http://V0JN02TM.xrksf.cn
http://0Lixz5vG.xrksf.cn
http://SRv1pzZu.xrksf.cn
http://KS7D8Vba.xrksf.cn
http://DR0cxxJA.xrksf.cn
http://lXvrrUa7.xrksf.cn
http://tLKefrLX.xrksf.cn
http://rbcIlfxs.xrksf.cn
http://j5JBW0M4.xrksf.cn
http://IN5O2FoO.xrksf.cn
http://m0jPYLM1.xrksf.cn
http://www.dtcms.com/a/370452.html

相关文章:

  • Linux/UNIX系统编程手册笔记:共享库、进程间通信、管道和FIFO、内存映射以及虚拟内存操作
  • 吴恩达机器学习(九)
  • 基于多级特征编码器用于声学信号故障检测模型
  • 【LeetCode热题100道笔记】二叉树中的最大路径和
  • The Open Group 宣布成立Industrial Advanced Nuclear™ 联盟)
  • 问题:指令译码前控制信号还没有产生,那么如何控制译码前指令的动作呢?
  • 软件测试理论
  • Wisdom SSH 是一款创新性工具,通过集成 AI 助手,为服务器性能优化带来极大便利。
  • ChatGPT下的相关聊天提示词
  • C# WinForm分页控件实现与使用详解
  • 在Ubuntu平台搭建RTMP直播服务器使用SRS简要指南
  • 设计艺术~缓存结构设计
  • 腾讯混元游戏视觉生成平台正式发布2.0版本
  • MySQL整理【01】
  • MQTT 与 Java 框架集成:Spring Boot 实战(三)
  • docker 推送仓库(含搭建、代理等)
  • 了解Python
  • LeetCode //C - 848. Shifting Letters
  • 数学判官为中医续命
  • 华为OmniPlacement技术深度解析:突破超大规模MoE模型推理瓶颈的创新设计
  • Web Worker 从原理到实战 —— 把耗时工作搬到后台线程,避免页面卡顿
  • [网络入侵AI检测] docs | 任务二分类与多分类
  • Browser Use:打造你的浏览器自动化助手
  • 全维度质量保障:捷多邦厚铜板控制方法详解
  • PDF文件基础-计算机字体
  • Python 制作的一个小说在线阅读工具
  • 携程社招前端面经
  • 基于扰动观察法(PO)的光伏最大跟踪策略Simulink
  • 提示语规则引擎:spring-ai整合liteflow
  • 少儿舞蹈小程序(9)校区信息展示