Сериализация данных в файлы и из них
Основная идея сохраняемости заключается в том, что объект должен иметь возможность записывать текущее состояние, указанное значениями переменных-членов, в постоянное хранилище. Позже объект можно повторно создать путем чтения или десериализации состояния объекта из постоянного хранилища. Ключевым моментом здесь является то, что сам объект отвечает за чтение и написание собственного состояния. Таким образом, чтобы класс был постоянным, он должен реализовать основные операции сериализации.
Платформа предоставляет реализацию по умолчанию для сохранения документов на диски в ответ на команды "Сохранить и сохранить как" в меню "Файл" и для загрузки документов из файлов диска в ответ на команду Open. С очень малой работой вы можете реализовать возможность документа записывать и считывать данные в файл и из нее. Главное, что необходимо сделать, — переопределить функцию-член сериализации в классе документов.
Мастер приложений MFC помещает скелетную переопределение CDocument
функции-члена Serialize
в класс документа, который он создает для вас. После реализации переменных члена приложения можно заполнить переопределение Serialize
кодом, который отправляет данные в "архивный объект", подключенный к файлу. Объект CArchive похож на объекты cin и cout input/output из библиотеки iostream C++. Тем не менее, CArchive
записывает и считывает двоичный формат, а не форматированный текст.
Что вы хотите узнать больше о
Роль документа в сериализации
Платформа автоматически реагирует на команды "Открыть" меню "Файл", "Сохранить" и "Сохранить как", вызвав функцию-член документа Serialize
, если она реализована. Например, команда ID_FILE_OPEN вызывает функцию обработчика в объекте приложения. В ходе этого процесса пользователь видит и реагирует на диалоговое окно "Открыть файл", а платформа получает имя файла, выбранное пользователем. Платформа создает объект, настроенный CArchive
для загрузки данных в документ, и передает архив Serialize
в . Платформа уже открыла файл. Код в функции-члене документа Serialize
считывает данные в архиве, реконструируя объекты данных по мере необходимости. Дополнительные сведения о сериализации см. в статье Сериализация.
Роль данных в сериализации
Как правило, данные типа класса должны иметь возможность сериализовать себя. То есть при передаче объекта в архив объект должен знать, как записать себя в архив и как считывать себя из архива. MFC обеспечивает поддержку сериализации классов таким образом. Если вы разрабатываете класс для определения типа данных и планируете сериализировать данные этого типа, проектируйте для сериализации.