Serializing C++ objects

纵然是瞬间 提交于 2019-12-22 09:13:31

问题


I would like to implement a Serialization Class which takes in an object and converts it into a binary stream and stored in a file. Later, the object should be reconstructed from a file.

Though this functionality is provided by BinaryFormatter in C#, I would like to design my own Serialization class from scratch.

Can someone point to some resources ?

Thanks in advance


回答1:


I have been using boost::serialization library for a while now and I think it is very good. You just need to create the serialization code like this:

class X {
  private:
    std::string value_;
  public:
    template void serialize(Archive &ar, const unsigned int version) {
       ar & value_;
     };
 }

No need to create the de-serialization code ( that's why they used the & operator ). But if you prefer you can still use the << and >> operators.

Also it's possible to write the serialization method for a class with no modification ( ex.: if you need to serialize an object that comes from a library ). In this case, you should do something like:

namespace boost { namespace serialization {
       template
       void serialize(Archive &ar, X &x const unsigned int version) {
                    ar & x.getValue();
       };
    }}



回答2:


I would like to give you a negative answer. It is less useful but it still may be.

I have been using boost serialization for several years and it was one of the greatest strategic mistakes of my company. It produces very large output, it is very slow, it propagates a whole bunch of dependencies making everything impossibly slow to compile, and then it is hard to get out because you have existing serialized formats. Further, it behaves differently on different compilers, thus upgrade from VS2005 to 2010 actually caused us to write a compatibility layer, which is also hard coz the code is very hard to understand.




回答3:


Here are 2 solutions for C++ serialization:

  • Stephan Beal's s11n serialization library
  • boost serialization library

I personally only have experience with the 1st one and actually only used text based serializers, but i know that it's easy to define binary serializers for use with s11n.




回答4:


The C++ Middleware Writer may be of interest. It has performance advantages over the serialization library in Boost. It also automates the creation of serialization functions.



来源:https://stackoverflow.com/questions/12499146/serializing-c-objects

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!