C ++ библиотека сериализации, которая поддерживает частичную сериализацию? [закрыто]

StackOverflow https://stackoverflow.com/questions/1810372

Вопрос

Существуют ли какие-нибудь хорошие библиотеки сериализации C ++, поддерживающие частичную сериализацию?

Путем «частичной сериализации» Я имею в виду, что, возможно, я захочу сохранить значения 3 конкретных членов, а затем иметь возможность применить эту сохраненную копию к другому экземпляру. Я только обновлю эти 3 участника и оставлю остальных нетронутыми.

Это было бы полезно для синхронизации данных по сети. Скажем, у меня есть какой-то объект на клиенте и на сервере, и когда член меняется на сервере, я хочу отправить клиенту сообщение, содержащее обновленное значение для этого члена и только этого члена . Я не хочу отправлять копию всего объекта по проводам.

boost :: serialization с первого взгляда выглядит так он поддерживает только все или ничего.

Редактировать: через 3 года после первоначального написания этого я оглядываюсь назад и говорю себе: «Что?» boost :: serialization позволяет вам определять, какие члены вы хотите сохранить или нет, поэтому он будет поддерживать «частичную сериализацию», как я, кажется, описал это. Кроме того, поскольку в C ++ отсутствуют библиотеки сериализации отражений, вам необходимо явно указать каждый элемент, который вы сохраняете, если только они не поставляются с какими-либо внешними инструментами для анализа исходных файлов или имеют отдельный формат входного файла, который используется для генерации кода C ++ (например, что делает протокол буферов). Я думаю, что, должно быть, я был в замешательстве, когда писал это.

Это было полезно?

Решение

Вы явно не ищете сериализацию здесь.

Сериализация - это сохранение объекта, а затем воссоздание его из потока байтов. Подумайте, сохраняются ли видеоигры или контекст сеанса для веб-сервера.

Здесь вам нужно обмен сообщениями. FlatBuffers от Google хорош для этого. Укажите сообщение, которое будет содержать каждое отдельное поле, как необязательное, после получения сообщения обновите свой объект с полями, которые существуют, и оставьте остальные нетронутыми.

Отличительной особенностью FlatBuffers является то, что он прекрасно справляется с прямой и обратной совместимостью, а также с текстовым и двоичным кодированием (текст отлично подходит для отладки, а двоичный код лучше для чистой производительности), помимо шага синтаксического анализа.

И вы даже можете декодировать сообщения на другом языке (например, на python или ruby), если сохраните их где-нибудь и захотите собрать HTML-интерфейс для его проверки!

Другие советы

Хотя я не знаком с ними, вы также можете проверить Google Буферы протокола .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top