新闻中心
C++怎么使用protobuf进行数据序列化_C++数据交换与protobuf应用
首先定义.proto文件描述数据结构,再用protoc生成C++代码,接着在程序中包含头文件并调用SerializeToOstream和ParseFromIstream进行序列化与反序列化,最后链接protobuf库完成构建。

在C++项目中使用Protocol Buffers(简称protobuf)进行数据序列化,是实现高效、跨平台数据交换的常用方式。它比JSON或XML更紧凑,解析更快,适合网络传输和持久化存储。下面介绍如何在C++中集成并使用protobuf完成序列化与反序列化操作。
定义.proto协议文件
使用protobuf的第一步是定义数据结构的.proto文件。这个文件描述了你要序列化的消息格式。
例如,创建一个person.proto文件:
syntax = "proto3";
message Person {
string name = 1;
int32 age = 2;
string email = 3;
}
这段代码定义了一个名为Person的消息类型,包含姓名、年龄和邮箱字段。每个字段都有唯一的编号,用于二进制编码。
生成C++代码
使用protoc编译器将.proto文件编译为C++头文件和源文件。
执行以下命令:
protoc --cpp_out=. person.proto
这会生成两个文件:person.pb.h 和 person.pb.cc。它们包含了Person类的C++实现,提供了序列化、反序列化和访问字段的方法。
在C++中序列化与反序列化
包含生成的头文件后,就可以创建对象并进行序列化操作。
千鹿Pr助手
智能Pr插件,融入众多AI功能和海量素材
128
查看详情
序列化示例:
#include "person.pb.h"
#include <fstream>
int main() {
Person person;
person.set_name("张三");
person.set_ag
e(25);
person.set_email("zhangsan@example.com");
std::ofstream output("person.bin", std::ios::binary);
person.SerializeToOstream(&output);
output.close();
return 0;
}
反序列化示例:
#include "person.pb.h"
#include <fstream>
#include <iostream>
int main() {
Person person;
std::ifstream input("person.bin", std::ios::binary);
person.ParseFromIstream(&input);
input.close();
std::cout << "Name: " << person.name() << "\n";
std::cout << "Age: " << person.age() << "\n";
std::cout << "Email: " << person.email() << "\n";
return 0;
}
上述代码展示了如何将对象写入二进制文件,以及从文件读取并恢复对象状态。
构建与链接protobuf库
编译时需要链接protobuf库。假设你已安装libprotobuf,使用g++编译:
g++ -o serialize main.cpp person.pb.cc `pkg-config --cflags --libs protobuf`
Windows上若使用CMake,需配置find_package(Protobuf REQUIRED)并链接protobuf::libprotobuf目标。
确保运行环境中有对应的动态库,或静态链接避免依赖问题。
基本上就这些。只要定义好协议,生成代码,调用API即可完成高效的数据交换。不复杂但容易忽略细节,比如字段编号不能重复、默认值处理、版本兼容性等。保持.proto文件演进时的向后兼容,是长期维护的关键。
以上就是C++怎么使用protobuf进行数据序列化_C++数据交换与protobuf应用的详细内容,更多请关注其它相关文章!
# 工厂网站怎么优化软件
# 化与
# 头文件
# 尼克
# 多线程
# 如何用
# 文本文件
# 松溪营销推广招聘信息
# 芦苞seo教程
# 如何实现
# 代金券的推广和营销的区别
# seo专栏视频教学
# 北京seo实训班学校
# 安徽网站推广优化哪个好
# 品牌网站建设必备内容
# 正规seo平台排名前十
# 临沂靠谱seo方案
# c++
# 数据交换
# 数据结构
# 序列化
# r
# 持久化存储
# 邮箱
# stream
# win
# ios
# ai
# 编码
# windows
# json
# js
# protobuf
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】
NetBeans Ant项目:自动化将资源文件复制到dist目录的教程
《燕云十六声》两周内达九百万玩家!位居畅销榜第五
一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰
12306怎么选座位选到安静区_12306选座安静区域选择策略
飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】
深入理解J*aScript Promise异步执行与微任务队列
C++指针和引用有什么区别_C++内存管理核心概念深度解析
composer的"require-dev"部分是用来做什么的?
Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏
QQ邮箱网页版入口登录 QQ邮箱在线邮箱官方通道
XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法
LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比
蛙漫移动版在线看 蛙漫手机浏览器直达入口
iwriter统一登录平台 iwrite账号密码登录页面
高德地图公交到站提醒失败如何解决 高德提醒权限设置
如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置
企业名称高精度匹配:N-gram方法在结构相似性分析中的应用
在哪找SublimeJ远程工具_SFTP插件配置教程
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
解决 Express.js 中 PUT 请求密码修改失败的路由配置指南
腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址
TikTok搜索不到用户发布内容怎么办 TikTok用户内容搜索优化方法
如何将HTML表格多行数据保存到Google Sheet
天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南
Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】
C++如何实现单例模式_C++设计模式之线程安全的单例写法
微博网页版直接访问 微博网页版账号管理快速入口
今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程
移动端XML文件怎么转换成Excel 手机和平板上的解决方案
c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换
mc.js官网登录入口 mc.js官方登录入口最新版
漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址
2026年CSGO开箱网站推荐 CSGO开箱平台精选
解决Python logging 中 datefmt 导致时间戳固定不变的问题
Go语言中的*string:深入理解字符串指针
海量存储:机器视觉智能化的核心基石
Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接
精准捕获:如何在页面中监听除特定元素外的所有点击事件
Typer应用中灵活处理命令行参数的令牌化与解析
如何使用纯J*aScript判断Input元素是否在特定类容器内
c++ 命名空间怎么用 c++ namespace使用指南
AO3最新镜像入口 Archive of Our Own官方平台访问
如何在J*a中使用Locale处理多语言环境
小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍
拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达
Angular中单选按钮的正确使用与常见陷阱解析
Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法
使用Pandas转换并合并DataFrame:多列映射至统一结构
J*aScript中如何高效提取对象指定属性


2025-11-12
浏览次数:次
返回列表
e(25);
person.set_email("zhangsan@example.com");
std::ofstream output("person.bin", std::ios::binary);
person.SerializeToOstream(&output);
output.close();
return 0;
}