1。Kapok的特点是简单,易用,header-only,只需要引用Kapok.hpp;高效,初步测试可与messagepack相媲美。它是纯C++11实现,因此需要支持C++11的编译器。2.主要功能是自动序列化和反序列化对象。使用起来非常简单。让我们看一个序列化/反序列化元组的例子。//序列化Serializersr;autotp=std::make_tuple(10,12,string("test"));sr.Serialize(tp,"tuple");//反序列化DeSerializerdr;std::tuplep;dr.Parse(sr.GetString());dr.Deserialize(p,"元组");是不是看起来很简单呢!让我们看一下序列化自定义对象的另一个示例。structPerson{ intage; stringname; stringcity; META(age,name,city)};Personp={18,"bb","aa"};//序列化Serializersr;sr.Serialize(p,"Person");//反序列化DeSerializerdr;Personperson;dr.Parse(sr.GetString());dr.Deserialize(person,"Person");同样很简单,这里的结构需要一个宏来定义META。这个META的作用是获取对象的元信息。有了这些元信息,我们就可以轻松实现序列化和反序列化。3、应用场景Kapok支持除指针以外的所有对象,支持结构的无限嵌套(嵌套结构还必须定义META宏)。这里先说说为什么不支持指针,因为如果对象中有指针存在两个问题:1.如果指针是动态数组,C++中无法获取数组的长度;2.指针还涉及到内存管理,希望Kapok专注于序列化和/或反序列化,暂且不谈内存管理。4.一个结构体必须有一个宏定义是否有侵入性?似乎每个序列化/反序列化的对象都有一个宏定义,看起来侵入性比较大,但是这种侵入是完全无害的,因为它只是定义了一个额外的函数,这个函数只会在序列化/反序列化的时候才会用到,并且会对当前对象没有任何影响。还有一点就是因为C++没有反射,所以必须通过一些方法来获取对象的元信息。纵观目前所有的序列化方案,只有这种方式最简洁,用户可以做的事情最少,这也是我选择这种方式的原因。5.Kapok如何实现序列化/反序列化Kapok第一层使用rapidjson,用于序列化基本类型,做了一个简单的封装,供上层使用。上层是序列化\反序列化实现层,主要实现对象元信息的解析和自动打包解包。以下是Kapok连载示意图:6.Kapok性能如何?初步测试将一个tuple序列化/反序列化10000次,发现Kapok的耗时和messagepack不相上下。7.木棉花是否支持多语言暂时不支持,先准备好c++版本。如果要支持多语言,需要用其他语言重写,比较麻烦,所以暂时不考虑多语言支持。