C ++ библиотека сериализации, которая поддерживает частичную сериализацию? [закрыто]
-
05-07-2019 - |
Вопрос
Существуют ли какие-нибудь хорошие библиотеки сериализации C ++, поддерживающие частичную сериализацию?
Путем «частичной сериализации» Я имею в виду, что, возможно, я захочу сохранить значения 3 конкретных членов, а затем иметь возможность применить эту сохраненную копию к другому экземпляру. Я только обновлю эти 3 участника и оставлю остальных нетронутыми.
Это было бы полезно для синхронизации данных по сети. Скажем, у меня есть какой-то объект на клиенте и на сервере, и когда член меняется на сервере, я хочу отправить клиенту сообщение, содержащее обновленное значение для этого члена и только этого члена . Я не хочу отправлять копию всего объекта по проводам.
boost :: serialization
с первого взгляда выглядит так он поддерживает только все или ничего.
Редактировать: через 3 года после первоначального написания этого я оглядываюсь назад и говорю себе: «Что?» boost :: serialization позволяет вам определять, какие члены вы хотите сохранить или нет, поэтому он будет поддерживать «частичную сериализацию», как я, кажется, описал это. Кроме того, поскольку в C ++ отсутствуют библиотеки сериализации отражений, вам необходимо явно указать каждый элемент, который вы сохраняете, если только они не поставляются с какими-либо внешними инструментами для анализа исходных файлов или имеют отдельный формат входного файла, который используется для генерации кода C ++ (например, что делает протокол буферов). Я думаю, что, должно быть, я был в замешательстве, когда писал это.
Решение
Вы явно не ищете сериализацию здесь.
Сериализация - это сохранение объекта, а затем воссоздание его из потока байтов. Подумайте, сохраняются ли видеоигры или контекст сеанса для веб-сервера.
Здесь вам нужно обмен сообщениями. FlatBuffers от Google хорош для этого. Укажите сообщение, которое будет содержать каждое отдельное поле, как необязательное, после получения сообщения обновите свой объект с полями, которые существуют, и оставьте остальные нетронутыми.
Отличительной особенностью FlatBuffers является то, что он прекрасно справляется с прямой и обратной совместимостью, а также с текстовым и двоичным кодированием (текст отлично подходит для отладки, а двоичный код лучше для чистой производительности), помимо шага синтаксического анализа. р>
И вы даже можете декодировать сообщения на другом языке (например, на python или ruby), если сохраните их где-нибудь и захотите собрать HTML-интерфейс для его проверки!
Другие советы
Хотя я не знаком с ними, вы также можете проверить Google Буферы протокола . р>