Сериализация с пользовательским шаблоном и произвольным доступом с Boost

Я спрашиваю здесь, потому что я уже пытался искать, но я понятия не имею, существуют ли эти вещи и как их зовут.

Я начинаю объяснять, что с пользовательским шаблоном я имею в виду следующее: предположим, что мне нужно сериализовать объекты или данные типа foo, bar и boo, обычно библиотека обрабатывает это для пользователя очень простым способом, и то, что приходит первым, идет первым в процесс сериализации, так что, если я сначала сериализую все foo, они будут написаны «вверху» файла, а все bar и boo — после foo.

Теперь я хотел бы сохранить порядок в моем файле и упорядочить вещи по индивидуальному шаблону, возможно ли это с помощью Boost? Какой раздел предоставляет эту функцию?

Во-вторых, это строго связано с первым, я также хотел бы получить доступ к моим сериализованным двоичным файлам таким образом, чтобы мне не приходилось анализировать и читать все предыдущие значения, чтобы извлечь только то, что мне интересно вроде как ОЗУ, которое работает на основе адреса памяти и предлагает произвольный доступ, не заставляя вас анализировать все остальные адреса.

Благодарю.

0

Решение

По первому вопросу: библиотека сериализации Boost не зависит от того, что происходит после того, как она превращает объект в сериализованную форму. Это делается с помощью входных и выходных потоков. Файлы — это просто fostream / fistream. Однако для других типов потоков порядок / шаблон, о котором вы говорите, не имеет смысла. Представьте, что вы отправляете сериализованные объекты по сети — библиотека не может знать, что ей придется изменить порядок объектов, и, фактически, она не может сделать это после того, как они были отправлены. По этой причине он не поддерживает то, что вы ищете.

Что вы можете сделать, это создать оболочку, которая либо просто кэширует сериализованные версии объектов и размещает их в памяти, прежде чем вы скажете ему записать их в файл, либо знает, что, поскольку вы работаете с файлами, это может произойти позже. tellg в соответствующее место в файле и добавьте (этот подход потребует от вас сохранения местоположений объектов, которые вы записали в файл).

Что касается второго — чтения файлов с произвольным доступом. Вы должны будете точно знать, где находится объект в памяти. Если вы знаете, что структура вашего файла не изменится, вы можете seekg в файловом потоке, прежде чем передать его для повышения десериализации. Однако если структура файла изменится, вам все равно нужно знать расположение объектов в файле. Если вы не хотите анализировать файл, чтобы найти его, вам придется хранить его где-нибудь во время сериализации. Например — вы можете поддерживать своего рода реестр объектов в верхней части файла. Вам все равно придется разобрать его, но это должно быть просто [Object identifier]-[location in file] Такие вещи.

1

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

Других решений пока нет …