跳转到帖子
登录关注  
墨香年少

protobuf simple demo

已推荐帖子

#include <iostream>
#include <fstream>
#include "addressbook.pb.h"

// 这是一个序列化函数,用于将AddressBook对象写入文件
void SerializeToFile(const std::string& filename, const tutorial::AddressBook& address_book) {
    std::ofstream output(filename, std::ios::out | std::ios::binary);
    if (!address_book.SerializeToOstream(&output)) {
        std::cerr << "Failed to write address book." << std::endl;
    }
}

// 这是一个反序列化函数,用于从文件中读取AddressBook对象
tutorial::AddressBook DeserializeFromFile(const std::string& filename) {
    tutorial::AddressBook address_book;
    std::ifstream input(filename, std::ios::in | std::ios::binary);
    if (!address_book.ParseFromIstream(&input)) {
        std::cerr << "Failed to read address book." << std::endl;
    }
    return address_book;
}

int main() {
    // 初始化Protobuf库
    GOOGLE_PROTOBUF_VERIFY_VERSION;

    // 创建一个AddressBook对象
    tutorial::AddressBook address_book;

    // 向AddressBook对象中添加一个Person对象
    tutorial::Person* person = address_book.add_people();
    person->set_name("John Doe");
    person->set_id(1234);
    person->set_email("johndoe@example.com");

    // 序列化到文件
    SerializeToFile("addressbook.bin", address_book);

    // 反序列化从文件
    tutorial::AddressBook new_address_book = DeserializeFromFile("addressbook.bin");

    // 打印反序列化后的数据
    for (const auto& person : new_address_book.people()) {
        std::cout << "Person ID: " << person.id() << std::endl;
        std::cout << "  Name: " << person.name() << std::endl;
        std::cout << "  E-mail address: " << person.email() << std::endl;
    }

    // 清理Protobuf库
    google::protobuf::ShutdownProtobufLibrary();

    return 0;
}

 


目之所及,皆是回忆,心之所想,皆是过往

分享这篇帖子


链接帖子
分享到其他站点

创建帐户或登录来提出意见

你需要成为会员才能提出意见

创建帐户

注册成为会员。只要几个简单步骤!

注册帐户

登录

已有帐户? 请登录。

现在登录
登录关注  

×
×
  • 创建新的...

重要信息

注册必须使用2-8个中文汉字作为账号