読者です 読者をやめる 読者になる 読者になる

MessagePack for C++を使ってみる

C++

とりあえず、シリアライズしてファイルへの保存と、読み込みしてデシリアライズをしてみました。
ファイルに保存するときの拡張子は.mpacにするのがいいそうです。

#include <msgpack.hpp>
#include <vector>
#include <string>
#include <iostream>
#include <fstream>
#include <boost/range/algorithm/for_each.hpp>

void disp(const std::string& s)
{
    std::cout << s << std::endl;
}

int main()
{
    // シリアライズ
    {
        std::vector<std::string> vec;
        vec.push_back("Hello");
        vec.push_back("MessagePack");

        std::ofstream file("data.mpac");
        msgpack::pack(&file, vec);
    }

    // デシリアライズ
    {
        std::ifstream file("data.mpac");
        std::istreambuf_iterator<char> first(file);
        std::istreambuf_iterator<char> last;

        const std::string data(first, last);

        try {
            msgpack::unpacked msg;
            msgpack::unpack(&msg, data.data(), data.size());

            msgpack::object obj = msg.get();
            const std::vector<std::string> vec = obj.as<std::vector<std::string> >();

            boost::for_each(vec, disp);
        }
        catch (msgpack::unpack_error&) {
            std::cout << "unpack failed" << std::endl;
        }
        catch (msgpack::type_error&) {
            std::cout << "type error" << std::endl;
        }
    }
}
Hello
MessagePack