一个更好的C++序列化/反序列化库Kapok

开发 后端 开发工具
一点梦想:尽自己一份力,让c++的世界变得更美好!

1.Kapok的特点

简单,易用,header-only,只需要引用Kapok.hpp即可;高效,初步测试性和messagepack相当。

它是纯c++11实现,因此需要支持C++11的编译器。

2.主要功能

对对象进行自动化的序列化和反序列化,用起来非常简单,先来看个序列化/反序列化一个tuple的例子吧。

 

//序列化 
Serializer sr; 
auto tp = std::make_tuple(1012, string("test")); 
sr.Serialize(tp, "tuple"); 
 
//反序列化 
DeSerializer dr; 
std::tuple<intint, string> p; 
dr.Parse(sr.GetString()); 
dr.Deserialize(p, "tuple"); 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

 

看起来是不是很简单!

再看一个序列化一个自定义对象的例子。

 

struct Person 

  int age; 
  string name; 
  string city; 
  
  META(age, name, city) 
}; 
  
Person p = { 18"bb""aa" }; 
//序列化 
Serializer sr; 
sr.Serialize(p, "Person"); 
  
//反序列化 
DeSerializer dr; 
Person person; 
dr.Parse(sr.GetString()); 
dr.Deserialize(person, "Person"); 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

 

 

一样的很简单,结构这里需要一个宏定义META,这个META的作用就是获取对象的元信息,有了这个元信息我们就可以很方便的实现序列化和反序列化了。

3.应用场景

Kapok除了不支持指针之外所有的对象都支持,支持结构体的无限嵌套(被嵌套的结构体也必须定义META宏)。这里说一下为 什么不支持指针呢,因为对象中有指针的话存在两个问题:1.这个指针如果是动态数组的话,c++中无法获取这个数组的长度;2.指针还涉及到内存管理,我 希望Kapok专注于序列化和/反序列化,暂时不考虑内存管理。

4.结构体必须有一个宏定义是否具有侵入性?

看起来每个序列化/反序列化的对象都要带一个宏定义似乎侵入性较强,但这种侵入性是完全无害 的,因为它只是定义了一个额外的函数而已,这个函数只会在序列化/反序列化的时候才会用到,不会对当前对象造成任何影响,还有一点是因为c++没有反射, 必须要通过某种方法来获取对象的元信息,纵观目前所有的序列化方案,只有这种方式是最简洁的,用户做最少的事情即可,这也是我选择这种方式的原因。

5.Kapok是如何实现序列化/反序列化的

Kapok的***层是用到了rapidjson, 用它来实现对基本类型的序列化,对它做了一个简单的封装以便供上层使用,上面层就是序列化\反序列化实现层,主要是实现对对象元信息的解析和自动化的打包和解包。下面是Kapok序列化的一个示意图:

一个更好的C++序列化/反序列化库Kapok

6.Kapok的性能如何

初步测试对一个tuple进行序列化/反序列化一万次,发现Kapok的耗时和messagepack相当。

7.Kapok是否支持多语言

暂时不支持,先把c++版本做好再说,如果要支持多语言的话,需要用其它语言进行重写,比较麻烦,所以暂时不考虑支持多语言。

 

 

责任编辑:王雪燕
相关推荐

2009-08-24 17:14:08

C#序列化

2022-08-06 08:41:18

序列化反序列化Hessian

2009-08-06 11:16:25

C#序列化和反序列化

2011-06-01 15:05:02

序列化反序列化

2011-06-01 14:50:48

2009-08-25 14:24:36

C#序列化和反序列化

2018-03-19 10:20:23

Java序列化反序列化

2009-08-25 14:43:26

C#序列化和反序列化

2011-05-18 15:20:13

XML

2023-12-13 13:49:52

Python序列化模块

2009-06-14 22:01:27

Java对象序列化反序列化

2019-11-20 10:07:23

web安全PHP序列化反序列化

2024-06-28 08:28:43

反序列化filterJson

2012-04-13 10:45:59

XML

2024-01-30 13:32:51

JSON反序列化序列化

2021-11-18 07:39:41

Json 序列化Vue

2009-09-09 14:45:41

XML序列化和反序列化

2009-09-09 15:47:27

XML序列化和反序列化

2009-09-09 16:10:11

.NET序列化和反序列

2009-07-29 13:39:02

JSON序列化和反序列ASP.NET AJA
点赞
收藏

51CTO技术栈公众号