Я пытаюсь использовать библиотеку boost для сериализации на 64-битной машине и десериализации на 32-битной машине. Однако, похоже, это не работает. (Я использую 1.57.0).
Если я запускаю следующий код
boost::asio::streambuf buf;
std::ostream os(&buf);
boost::archive::binary_oarchive oa(os);
printf("Buffer size %d\n",(int)buf.size());
Выход 32-битной машины 37 и выход 64-битной машины 41.
Есть ли еще какая-нибудь хорошая библиотека сериализации, которую я могу использовать?
Как насчет зерновой?
Хорошо, если библиотека может также выполнять сжатие (zlib / gzip и т. Д.).
Это работает. Он просто не создает совместимые архивы. Если вы хотите, вы должны взглянуть на реализацию архива, которую сделал EOS:
Вы можете вставить его в архив Boost’s binary_ [io]. Не нужно ничего менять.
PS. Конечно, объясните ваши типы также независимо от архитектуры. Так uint32_t
, не « size_t`
Бинарные архивы, созданные boost :: serialization, не будут работать, если вы измените архитектуру машины. Текстовые архивы являются хорошим вариантом в этом сценарии. Boost :: archive :: text_oarchive и boost :: archive :: text_iarchive можно использовать точно так же, но они безопасны для всех архитектур и платформ. Данные записываются в формате ASCII, а не в двоичном формате, так что здесь есть компромиссы, которые необходимо будет решить для вашей цели.
Я бы порекомендовал использовать для этой цели ‘cereal’, который мог бы обеспечить сериализацию JSON / XML.