Поделиться через


Сериализация в MFC

В этой статье объясняется механизм сериализации, предоставляемый в библиотеке классов Microsoft Foundation (MFC), чтобы разрешить объектам сохраняться между выполнением программы.

Сериализация — это процесс записи или чтения объекта в носитель постоянного хранилища, например файл диска. Сериализация идеально подходит для ситуаций, когда требуется сохранить состояние структурированных данных (например, классов или структур C++) во время или после выполнения программы. Использование объектов сериализации, предоставляемых MFC, позволяет выполнять это в стандартном и согласованном режиме, что позволяет пользователю выполнять операции с файлами вручную.

MFC предоставляет встроенную поддержку сериализации в классе CObject. Таким образом, все классы, производные от CObject использования протокола сериализации, могут воспользоваться CObjectпреимуществами протокола сериализации.

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

MFC использует объект CArchive класса в качестве посредника между объектом для сериализации и носителя хранилища. Этот объект всегда связан с CFile объектом, из которого он получает необходимые сведения для сериализации, включая имя файла и то, является ли запрошенная операция чтением или записью. Объект, выполняющий операцию сериализации, может использовать CArchive объект без учета характера носителя хранилища.

Объект CArchive использует перегруженные операторы вставки (<<) и извлечения (>>) для выполнения операций записи и чтения. Дополнительные сведения см. в разделе "Хранение и загрузка CObjects" с помощью архива в статье Сериализация: сериализация объекта.

Примечание.

Не путайте CArchive класс с классами iostream общего назначения, которые предназначены только для отформатированного текста. Класс CArchive предназначен для сериализованных объектов в двоичном формате.

Если вы хотите, можно обойти сериализацию MFC, чтобы создать собственный механизм для постоянного хранения данных. Необходимо переопределить функции-члены класса, которые инициируют сериализацию в команде пользователя. См. обсуждение в техническом примечание 22 ID_FILE_OPEN, ID_FILE_SAVE и стандартных команд ID_FILE_SAVE_AS.

В следующих статьях рассматриваются две основные задачи, необходимые для сериализации:

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

См. также

Основные понятия
Общие разделы по MFC
Класс CArchive
Класс CObject
Класс CDocument
Класс CFile