Сериализация данных приложения (общие сведения)

   
На этом шаге мы приведем общие сведения о сериализации.

   
Необходимость в хранилище постоянных данных создает дополнительные трудности при
разработке объектно-ориентированных приложений. Команде разработчиков приходится
решать, как сохранять структуру и взаимосвязи объектов приложения при записи и
восстановлении постоянных данных. Решение этой проблемы - нетривиальное занятие,
ведь обычно данные файла записываются в виде неструктурированного двоичного потока.
Каркас MFC-приложения помогает разрешить эту непростую ситуацию, предлагая
сериализацию (serialization) - метод сохранения структуры данных
прикладных объектов при записи и восстановлении из архива постоянного хранения.

   
Встроенная в MFC сериализация обеспечивается классом CObject. Необходимо,
чтобы все другие поддерживающие сериализацию классы были производными от CObject
и перегружали функцию CObject::Serialize(). Задача Serialize() заключается в
архивировании отдельных данных класса и сохранении и восстановлении их из объекта
MFC-класса CArchive.

   
CArchive служит посредником между сериализуемым объектом и средой хранения
данных и всегда связывается с объектом CFile. Обычно последний представляет
дисковый файл, но ничто не запрещает ему представлять и файл в памяти. Например, можно
связать CArchive с объектом CSharedFile для сериализации данных в буфере
(или из буфера) обмена Windows. Кроме того, объект CArchive поддерживает
механизм буферизации, сохраняющий типы при чтении и записи сериализуемых объектов в
и из объекта CFile.

   
Отдельно взятый объект CArchive можно применять либо для хранения данных, либо
для их загрузки, но никогда - для обеих операций одновременно. Время жизни CArchive
ограничено одним проходом записи в файл или чтения объектов из файла. Для сериализации
в файл и восстановления из файла создаются отдельные объекты CArchive.
Предназначение CArchive (запись или чтение) можно определить, обратившись к функции
CArchive::IsStoring(), возвращающей булево значение.

   
В классе CArchive определены операторы помещения в поток (<<) и
извлечения из потока (>>). Они применяются так же, как и в стандартных классах
потоков C++. Это проиллюстрировано в следующем коде:

if (ar. IsStoring()) 
{
  ar << m_string; 
}
else 
{
  ar >> m_string; 
}

   
Вы можете использовать их для сохранения или извлечения данных из объектов CArchive.
Ниже приведены типы данных и объекты, совместимые с операторами помещения в поток и извлечения из потока.

CObject*      SIZE и CSize     Float
WORD          CString          POINT и CPoint
DWORD         BYTE             RECT и CRect
double        LONG             CTime и CTimeSpan
int           COleCurrency     COleVariant
COleDateTime  COleDateTimeSpan

   
На следующем шаге мы рассмотрим процесс сериализации.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий