C++ Protobuf相关自定义函数

#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; // 反序列化成功
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值