#include <iostream>
#include <fstream> //f stream(文件流)
#include "user.pb.h" // 假设你的生成文件名是 user.pb.h
// 序列化方法
void serializationMessage(const 包名::自定义类型& message)
{
// 打开一个输出文件流,用于写入二进制数据
// 文件名为 "data_with_timestamp.bin",以二进制模式打开文件
std::ofstream output("data_with_timestamp.bin", std::ios::binary);
//std::ios::out:以输出模式打开文件,以便写入数据。
//std::ios::trunc:如果文件存在,则在打开时清空文件内容。(谨慎斟酌使用)
//std::ios::binary:以二进制模式打开文件,不进行任何文本格式转换。
// 检查消息对象是否成功序列化到输出文件流中
// SerializeToOstream 方法用于将消息对象序列化并写入到输出流中
if (!message.SerializeToOstream(&output)) {
// 如果序列化失败,输出错误信息到标准错误流
std::cerr << "Failed to write message." << std::endl;
std::cerr << " 写入protobuf消息失败 " << std::endl;
return; // 返回,结束函数执行
}
}
// 反序列化方法(文件名为序列化时候的.bin文件)
bool deserializeMessage(const std::string& filename, 包名::DataWithTimestamp& message)
{
// 打开输入文件流,以二进制模式读取文件
std::ifstream input(filename, std::ios::binary);
// 检查文件是否成功打开
if (!input) {
std::cerr << "Failed to open file: " << filename << std::endl;
return false;
}
// 使用 ParseFromIstream 方法从输入流中反序列化消息
if (!message.ParseFromIstream(&input)) {
std::cerr << "Failed to parse message from file: " << filename << std::endl;
return false;
}
return true; // 反序列化成功
}
C++ Protobuf相关自定义函数
于 2024-07-05 15:40:31 首次发布