• ProtoBuf练习(五)


    表类型

    protobuf语言的maps字段类型相当于C++语言的std::map类型

    工程目录结构

    $ ls proto/
    sample_maps.proto
    

    proto文件

    $ cat proto/sample_maps.proto
    syntax = "proto3";
    
    message home
    {
        string addr = 1;
    }
    
    message sample_maps
    {
        map<int32, string> ids = 1;
        map<string, home> infos = 2;
    }
    

    读写源文件

    $ cat reader.cpp
    #include <fstream>
    #include <iostream>
    #include "sample_maps.pb.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        fstream input("./log", ios::in | ios::binary);
        cout << "Deserialize start." << endl;
    
        sample_maps m;
        if (!m.ParseFromIstream(&input))
        {
            cout << "Deserialize failed." << endl;
            return -1;
        }
        
        auto ids = m.ids();
        for (auto iter = ids.cbegin(); iter != ids.cend(); iter++)
            cout << iter->first << " : " << iter->second << endl; 
        
        auto infos = m.infos();
        for (auto iter = infos.cbegin(); iter != infos.cend(); iter++)
            cout << iter->first << " : " << iter->second.DebugString(); 
    
        cout << "Deserialize end." << endl;
        input.close();
        return 0;
    }
    
    $ cat writer.cpp
    #include <fstream>
    #include <iostream>
    #include "sample_maps.pb.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        sample_maps m;
        auto ids_ptr = m.mutable_ids();
        (*ids_ptr)[1] = "fwd";
        (*ids_ptr)[2] = "xb";
    
        auto infos_ptr = m.mutable_infos();
        home h;
        h.set_addr("nj");
        (*infos_ptr)["fwd"] = h;
    
        fstream output("./log", ios::out | ios::trunc | ios::binary); 
        cout << "Serialize start." << endl;
        if (!m.SerializeToOstream(&output))
            {
                    cout << "Serialize failed." << endl;
                    return -1;
            }
        output.close();
        cout << "Serialize end." << endl;
        return 0;
    }
    
  • 相关阅读:
    Nginx分发服务
    apache+nginx 实现动静分离
    mysql 配置
    mysql 配置,还得多看看~
    Linux安装字体
    Oracle10g中阻塞锁查询更简单
    Access WMI via Python from Linux
    安装filezilla client报错libgnutls版本旧
    tomcat 服务形式检测
    JMX实现远程服务器Tomcat系统监控之三
  • 原文地址:https://www.cnblogs.com/silvermagic/p/9087621.html
Copyright © 2020-2023  润新知