首先定义.proto文件描述数据结构,再用protoc生成C++代码,接着调用SerializeToOstream序列化对象到文件,通过ParseFromIstream从文件反序列化恢复对象,最后编译时链接Protobuf库完成构建。

在C++中使用Protobuf(Protocol Buffers)进行序列化和反序列化,是一种高效、轻量且跨平台的数据交换方式。它由Google开发,广泛用于网络通信和数据存储场景。下面详细介绍如何在C++项目中集成并使用Protobuf完成数据的序列化与反序列化。
使用Protobuf的第一步是定义数据结构。创建一个.proto文件来描述你要序列化的消息类型。
例如,新建person.proto:
syntax = "proto3";
message Person {
string name = 1;
int32 age = 2;
string email = 3;
}
这段代码定义了一个名为Person的消息,包含姓名、年龄和邮箱字段。
使用protoc编译器将.proto文件编译为C++源码。
执行以下命令:
protoc --cpp_out=. person.proto
会生成两个文件:person.pb.h 和 person.pb.cc。这些文件包含了可直接在C++中使用的类。
在C++程序中包含生成的头文件,并使用其提供的方法进行序列化。
示例代码:
Opus
AI生成视频工具
77
查看详情
#include "person.pb.h"
#include <fstream>
#include <iostream>
int main() {
Person person;
person.set_name("Alice");
person.set_age(30);
person.set_email("alice@example.com");
// 序列化为二进制文件
std::ofstream output("person.bin", std::ios::binary);
if (!person.SerializeToOstream(&output)) {
std::cerr << "序列化失败!" << std::endl;
return -1;
}
output.close();
std::cout << "数据已序列化到 person.bin" << std::endl;
return 0;
}
说明:调用SerializeToOstream()将对象写入输出流,也可使用SerializeToArray()或SerializeToString()获取内存中的字节流。
读取之前保存的数据并还原成对象。
示例代码:
#include "person.pb.h"
#include <fstream>
#include <iostream>
int main() {
Person person;
// 从文件读取并反序列化
std::ifstream input("person.bin", std::ios::binary);
if (!person.ParseFromIstream(&input)) {
std::cerr << "反序列化失败!" << std::endl;
return -1;
}
input.close();
// 打印结果
std::cout << "姓名: " << person.name() << std::endl;
std::cout << "年龄: " << person.age() << std::endl;
std::cout << "邮箱: " << person.email() << std::endl;
return 0;
}
说明:通过ParseFromIstream()从输入流恢复对象,也可以用ParseFromArray()或ParseFromString()解析内存数据。
编译时需要链接Protobuf库。假设你已安装libprotobuf-dev(Linux)或配置好Windows环境。
编译命令示例:
g++ -std=c++11 person.pb.cc main.cpp -lprotobuf -o demo
确保.pb.cc文件被一起编译,并正确链接-lprotobuf库。
基本上就这些。只要定义好协议文件,生成代码后就能快速实现高性能的序列化操作。注意版本兼容性和字段编号唯一性,避免后期升级出错。整个过程不复杂但容易忽略细节,比如忘记编译.pb.cc文件或未正确设置include路径。
以上就是c++++如何使用Protobuf进行序列化和反序列化_c++数据序列化框架Protobuf使用教程的详细内容,更多请关注其它相关文章!
# 网络编程
# 亳州网站建设推广公司电话
# 桥西区网站优化推广
# 卢龙大型网站建设名称
# 拼多多推广营销表情包
# 海沧seo供应商
# 智能化网站推广来电咨询
# 当当网的网站推广方法
# 宁德谷歌seo厂家地址
# 凌源seo全网优化
# 江门网站建设改版
# 就能
# 是一种
# 客户端
# 尼克
# 创建一个
# linux
# 如何用
# 数据结构
# 如何使用
# 序列化
# 邮箱
# google
# stream
# win
# ios
# c++
# ai
# 字节
# windows
# go
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
如何编写一个符合 composer 规范的 post-install-cmd 脚本?
php如何实现多域名共享session_php存储session到redis与跨域读取配置
顺丰快递在线查询系统 顺丰快递官方查单入口
J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制
漫蛙manwa漫画官网链接_漫蛙manwa最新可用网址推荐
驱动人生:游戏修复指南
J*aScript类型数组_TypedArray使用
Go语言中方法与接收器:指针和值类型的调用机制详解
Lar*el 关联查询:同时筛选父表与子表数据的高效策略
悟空浏览器网页版链接 悟空浏览器网页版最新有效地址
我的世界官方网址入口 我的世界游戏主页直达入口
荣耀Magic7拍照夜景噪点处理_荣耀Magic7相机优化
Excel宏怎么删除_Excel中删除宏的详细操作流程
秋风萧瑟洪波涌起中的萧瑟指的是什么
中大网校app做题记录清除方法
如何使用 composer 和 aop-php 实现 AOP 编程?
QQ邮箱官方登录页_腾讯出品安全稳定的邮箱服务
如何查询个人病历记录
漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接
Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析
怎么恢复删除的电脑文件_数据恢复软件使用教程
《兴业银行》注册登录方法
Golang如何使用crypto/md5生成哈希_Golang MD5哈希生成方法
PHP安全加载非公开目录图片与动态内容类型处理指南
豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】
消除网页顶部意外空白线:CSS布局常见问题与解决方案
照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程
yy漫画官方网站登录入口_yy漫画在线阅读页面地址
《一起考教师》账号注销方法
《下一站江湖2》风神腿获取攻略
《via浏览器》强制缩放网页设置方法
《i莞家》修改昵称方法
《盗墓笔记手游》技能介绍
晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制
韩小圈网页版PC端入口 韩小圈网页版官方网站入口
解决Flex容器横向滚动内容截断与偏移问题
《鹿路通》退余额方法
斯宾塞称XGP云游戏“蒸蒸日上”:正在构建一个游戏从未如此唾手可得的未来
《糖豆》添加舞曲方法
VS Code如何设置默认配置
如何在mysql中使用索引提示_mysql索引提示优化方法
解决Pandas DataFrame高度碎片化警告:高效创建多列的策略
Excel如何设置动态下拉菜单_Excel表格下拉选项快速方法
三星M34录音变声问题_Samsung M34麦克风调整
视频转蓝光m2ts格式
《东方航空》添加乘机人方法
J*aScript桌面应用_Electron多进程架构实战
《知到》打卡课程方法
Yandex浏览器官方入口_Yandex搜索引擎中文版
BunnyStream TUS视频上传指南:解决401认证错误与参数配置
2025-12-20
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。