Я хотел бы реализовать класс сериализации, который принимает объект и преобразует его в двоичный поток и хранится в файле. Позже объект должен быть реконструирован из файла.
Хотя эта функция предоставляется BinaryFormatter в C #, я бы хотел
собственный класс сериализации с нуля.
Может кто-то указать на некоторые ресурсы?
заранее спасибо
Я уже некоторое время использую библиотеку boost :: serialization и думаю, что это очень хорошо. Вам просто нужно создать код сериализации следующим образом:
class X {
private:
std::string value_;
public:
template void serialize(Archive &ar, const unsigned int version) {
ar & value_;
};
}
Нет необходимости создавать код десериализации (поэтому они использовали & оператор). Но если вы предпочитаете, вы все равно можете использовать << и >> операторы.
Также возможно написать метод сериализации для класса без изменений (например: если вам нужно сериализовать объект, который поступает из библиотеки). В этом случае вы должны сделать что-то вроде:
namespace boost { namespace serialization {
template
void serialize(Archive &ar, X &x const unsigned int version) {
ar & x.getValue();
};
}}
Я хотел бы дать вам отрицательный ответ. Это менее полезно, но все же может быть.
Я использую сериализацию в течение нескольких лет, и это была одна из величайших стратегических ошибок моей компании. Он выдает очень большой вывод, он очень медленный, он распространяет целую кучу зависимостей, что делает невозможным медленную компиляцию, а затем трудно выйти из-за существующих сериализованных форматов. Кроме того, он ведет себя по-разному на разных компиляторах, поэтому обновление с VS2005 до 2010 фактически заставило нас написать слой совместимости, что также сложно, потому что код очень сложен для понимания.
Вот 2 решения для сериализации C ++:
Лично у меня есть только опыт работы с 1-м и фактически использовались только текстовые сериализаторы, но я знаю, что легко определить двоичные сериализаторы для использования с s11n.
C ++ Middleware Writer может представлять интерес Она имеет преимущества в производительности по сравнению с библиотекой сериализации в Boost. Это также автоматизирует создание функций сериализации.