Cериализация для начинающих - Часть 1

ОГЛАВЛЕНИЕ

Это руководство описывает легкий способ перевода простого объекта в последовательную форму.

Данная статья является первой частью руководства по сериализации, состоящего из трех частей.

  • Часть 1 является введением в основы сериализации.
  • Часть 2 объясняет, как обрабатывать чтение данных из неисправных хранилищ данных и поддерживать контроль версий.
  • Часть 3 описывает, как переводить в последовательную форму сложные объекты.

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

  • Объект CFile, представляющий файл данных.
  • Объект CArchive, обеспечивающий контекст сериализации.
  • Объект, подвергающийся сериализации.

Шаг 1 – Открытие файла данных

Чтобы сериализовать объект в файл "foo.dat", откройте файл с соответствующим режимом доступа. В данном примере файл открывается в режиме монопольного доступа для чтения/записи.

// Открываем файл "foo.dat"
  CFile* pFile = new CFile();
  ASSERT (pFile != NULL);
  if (!pFile->Open ("foo.dat", CFile::modeReadWrite | CFile::shareExclusive)) {
      // Обрабатываем ошибку
      return;
  }

Шаг 2 – Подключение архива

Затем к файлу подключается объект CArchive. Архив предоставляет эффективный канал связи с постоянным хранилищем. Вместо прямого чтения из файла или записи в файл вы сериализуете данные в архив или из архива. Архиву необходимо знать, собираетесь ли вы его использовать для чтения или для записи данных. В этом примере осуществляется запись данных.

// Создание архива ...
  bool bReading = false;  // ... для записи
  CArchive* pArchive = NULL;
  try

  {
    pFile->SeekToBegin();
    UINT uMode = (bReading ? CArchive::load : CArchive::store);
    pArchive = new CArchive (pFile, uMode);
    ASSERT (pArchive != NULL);
  }

  catch (CException* pException)
  {
    // Обработка ошибки
    return;
  }