简介

easypack是基于boost.serialization的二进制序列化框架,使用极其方便。

Examples

  • 基本类型

    int age = 20;
    std::string name = "Jack";
    easypack::Pack p;
    p.pack(age, name); int age2;
    std::string name2;
    easypack::UnPack up(p.getString());
    up.unpack(age2, name2);
    /* up.unpackTop(age2); */
    /* up.unpackTop(name2); */

可以看到,pack/unpack支持变参,并且还支持出栈式反序列化,使用非常方便。

  • std::tuple

    std::tuple<int, std::string> tp = std::make_tuple(10, "Tom");
    easypack::Pack p;
    p.pack(tp); std::tuple<int, std::string> tp2;
    easypack::UnPack up(p.getString());
    up.unpack(tp2);

boost序列化默认不支持std::tuple类型,easypack序列化std::tuple提供了和序列化基本类型一样的接口。

  • STL类型

    std::vector<int> vec { 1, 2 };
    std::unordered_map<int, std::string> m;
    std::stack<int> s;
    s.push(100);
    s.push(200);
    m.emplace(1, "Hello");
    m.emplace(2, "world");
    easypack::Pack p;
    p.pack(vec, m, s); std::vector<int> vec2;
    std::unordered_map<int, std::string> m2;
    std::stack<int> s2;
    easypack::UnPack up(p.getString());
    up.unpack(vec2, m2, s2);
  • 类类型

    struct PersonInfo
    {
    std::string name;
    int age; template<class Archive>
    void serialize(Archive& ar, const unsigned int)
    {
    ar & name;
    ar & age;
    }
    }; PersonInfo info { "Jack", 20 };
    easypack::Pack p;
    p.pack(info); PersonInfo person;
    easypack::UnPack up(p.getString());
    up.unpack(person);

依赖性

  • boost.serialization
  • c++11

兼容性

  • Linux x86_64 gcc 4.8, gcc4.9, gcc 5.
  • Windows x86_64 Visual Studio 2015

License

This software is licensed under the MIT license. © 2016 chxuan

二进制序列化框架easypack发布啦!的更多相关文章

  1. Java序列化框架性能比較

    博客: http://colobu.com jvm-serializers提供了一个非常好的比較各种Java序列化的的測试套件. 它罗列了各种序列化框架. 能够自己主动生成測试报告. 我在AWS c3 ...

  2. 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转

    线程安全使用(四)   这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...

  3. 常见的序列化框架及Protobuf序列化原理

    原文链接:https://www.jianshu.com/p/657fbf347934 https://www.cnblogs.com/javazhiyin/p/11375553.html https ...

  4. Mapreduce之序列化框架(转自http://blog.csdn.net/lastsweetop/article/details/9376495)

    框架简介 MapReduce仅仅可以支持Writable做key,value吗?答案是否定的.事实上,一切类型都是支持的,只需满足一个小小的条件:每个类型是以二进制流的形式传输.为此Hadoop提供了 ...

  5. C#中的二进制序列化和Json序列化

    序列化就是把一个对象变成流的形式,方便传输和还原.小弟不才,总结下对二进制序列化和Json序列化的使用: 1.首先,二进制序列化(BinaryFormatter)要求要序列化的类必须是可序列化的(即在 ...

  6. 序列化战争:主流序列化框架Benchmark

    序列化战争:主流序列化框架Benchmark GitHub上有这样一个关于序列化的Benchmark,被好多文章引用.但这个项目考虑到完整性,代码有些复杂.为了个人学习,自己实现了个简单的Benchm ...

  7. hadoop深入研究:(十三)——序列化框架

    hadoop深入研究:(十三)--序列化框架 Mapreduce之序列化框架(转自http://blog.csdn.net/lastsweetop/article/details/9376495) 框 ...

  8. java序列化框架(protobuf、thrift、kryo、fst、fastjson、Jackson、gson、hessian)性能对比

     我们为什么要序列化 举个栗子:下雨天我们要打伞,但是之后我们要把伞折叠起来,方便我们存放.那么运用到我们java中道理是一样的,我们要将数据分解成字节流,以便存储在文件中或在网络上传输,这叫序列 ...

  9. 5.3.4 Hadoop序列化框架

    序列化框架 除了writable实现序列化之外,只要实现让类型和二进制流相互转换,都可以作为hadoop的序列化类型,为此Hadoop提供了一个序列化框架接口,他们在org.apache.hadoop ...

随机推荐

  1. sqlite 批量插入, 重复插入(更新)

    [FMDBManager inDatabase:^(FMDatabase *db) { [db shouldCacheStatements]; //开始启动事务 [db beginTransactio ...

  2. 转】Eclipse在线安装SVN

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4354199.html 感谢! 对于,搞大数据的博主我,svn是需要了解的,很多源码包! 一.SVN在线安装 下面 ...

  3. 查看MySql中每个IP的连接数

    要统计数据库的连接数,我们通常情况下是统计总数,没有细分到每个IP上.现在要监控每个IP的连接数,实现方式如下: ) as ip , count(*) from information_schema. ...

  4. hdu 2444 The Accomodation of Students(最大匹配 + 二分图判断)

    http://acm.hdu.edu.cn/showproblem.php?pid=2444 The Accomodation of Students Time Limit:1000MS     Me ...

  5. JPA多对多@manytomany注解配置实例

    维护端注解 @ManyToMany (cascade = CascadeType.REFRESH) @JoinTable (//关联表 name = "student_teacher&quo ...

  6. JQ的each

    写法一:遍历JSON数据 $.each(JSON.parse("{" + msg.d + "}"), function (key, name) { //处理得到 ...

  7. Android - 应用名称设置的问题

    今天我想修改我的android应用名称,就是手机桌面上图标下面的名称,根据我的理解我修改AndroidManifest.xml文件中application标签中的android:label=" ...

  8. HDU 5443 The Water Problem (水题,暴力)

    题意:给定 n 个数,然后有 q 个询问,问你每个区间的最大值. 析:数据很小,直接暴力即可,不会超时,也可以用RMQ算法. 代码如下: #include <cstdio> #includ ...

  9. linux中less命令使用

    less与cat和more的区别: cat命令功能用于显示整个文件的内容单独使用没有翻页功能因此经常和more命令搭配使用,cat命令还有就是将数个文件合并成一个文件的功能. more命令功能:让画面 ...

  10. 使用java发送邮件sp自动发送邮件方法

    注意:将jar包复制到web-info文件夹下lib: activation.jar mail.jar //发送邮箱 public static String sendEmail(String sen ...