Ускоренная сериализация не работает между 32-битной и 64-битной машиной. Любая другая библиотека сериализации / сжатия?

Я пытаюсь использовать библиотеку 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 и т. Д.).

3

Решение

Это работает. Он просто не создает совместимые архивы. Если вы хотите, вы должны взглянуть на реализацию архива, которую сделал EOS:

Вы можете вставить его в архив Boost’s binary_ [io]. Не нужно ничего менять.


PS. Конечно, объясните ваши типы также независимо от архитектуры. Так uint32_t, не « size_t`

3

Другие решения

Бинарные архивы, созданные boost :: serialization, не будут работать, если вы измените архитектуру машины. Текстовые архивы являются хорошим вариантом в этом сценарии. Boost :: archive :: text_oarchive и boost :: archive :: text_iarchive можно использовать точно так же, но они безопасны для всех архитектур и платформ. Данные записываются в формате ASCII, а не в двоичном формате, так что здесь есть компромиссы, которые необходимо будет решить для вашей цели.

1

Я бы порекомендовал использовать для этой цели ‘cereal’, который мог бы обеспечить сериализацию JSON / XML.

-1