на начало
На главную страницу
Форум   

Статья :: Объекты сериализации


Объекты сериализации

Хотя каркас знает, как сохранять объект, помеченный атрибутом Serializable (Преобразуемый в последовательную форму), но все же необходимо определить формат, в котором будет сохранен объект, и носитель данных. Чтобы определить формат, в котором будет сохранен объект, нужно использовать экземпляр объекта, который поддерживает интерфейс IFormatter.
Каркас имеет два таких класса: System: :Runtime: :Serialization: : Formatters :: Binary: : BinaryFormatter (Система::Время выполнения:: Преобразование в последовательную форму::Форматеры::Двоичный::ВтагуРогтаиег) и System :: Runtime :: Serialization :: Formatters :: Soap :: Soар Formatter (Система :: Время выполнения :: Преобразование в последовательную форму :: Форматеры :: Sоар:: Soap-Formatter). BinaryFormatter использует двоичный, компактный формат для сериализации и преобразования из последовательной формы в параллельную на платформах, которые поддерживают общеязыковую среду времени выполнения CLR. SoapForrnatter использует промышленный стандарт протокола SOAP, который обсуждается в главе 11 "Web-службы". Так как он основан на XML, и, следовательно, является текстовым протоколом, он может использоваться для связи с платформой, не основанной на общеязыковой среде времени выполнения CLR. Двоичный формат быстрее при сериализации и преобразовании данных из последовательной формы в параллельную.
Можно, конечно, создать свои собственные классы форматирования. Это может понадобиться лишь в том случае, если при взаимодействии с внешней системой нужно учитывать ее собственный байтовый формат файловых объектов.
Пример Serialization (Сериализация) содержит код, демонстрирующий использование FileStream для сохранения и восстановления обоих форматов: двоичного и SOAP. Конечно, можно использовать любой класс, производный от Stream (Поток, Абстрактный последовательный файл), лишь бы он представлял некоторый носитель данных. Необходимо предпринять специальные меры, чтобы гарантировать, что метод Load (Загрузка) сможет изменять параметр, который указывает на HotelBroker. Для этого параметр объявляется как ссылка на указатель, указывающий на HotelBroker.

static void Save( // статический метод Сохранить
HotelBroker *broker, String *formatter)
{
FileStream *s;
if (String::Equals(formatter, "b"))
// если (Строка::Равняется (форматер, "b"))
{
s = new FileStream(
"hotels.bin", FileMode::Create); // Создать
BinaryFormatter *b = new BinaryFormatter;
b->Serialize (s, broker);
// Преобразовать в последовательную форму (s, брокер);
}
else
{
s = new FileStream(
"hotels.txt", FileMode::Create); // Создать
SoapFormatter *sf = new SoapFormatter;
sf->Serialize(s, broker);
// Преобразовать в последовательную форму (з, брокер);
}
s->Close ();
}
static void Load( // статический метод Загрузка
HotelBroker *&broker, /* ссылка на указатель */
String *formatter) // Строка
{
FileStream *s;
if (String::Equals(formatter, "b"))
// если (Строка::Равняется (форматер, "b"))
{
s = new FileStream("hotels.bin", FileMode::Open); // Открыть
BinaryFormatter *b = new BinaryFormatter; broker = // брокер
dynamic_cast<HotelBroker *>
(b->Deserialize (s) ) ;
}
else
{
s = new FileStream("hotels.txt", FileMode::Open);
// Открыть
SoapFormatter *sf = new SoapFormatter;
broker = // брокер
dynamic_cast<HotelBroker *>(sf->Deserialize(s));
}
s->Close();
ShowHotelList(broker->GetHotels());
}

Ниже приведен некоторый типовой вывод примера Serialization (Сериализация): сначала мы добавляем название гостиницы и сохраняем его с помощью форматера SOAP. Затем мы выходим из программы.

Enter command: cities
Atlanta
Boston
Commands: quit, cities, list, add, fetch, save
Enter command: list
City Name Rooms Rate
Atlanta Dixie 100 115
Atlanta Marriott 500 70
Boston Sheraton 250 95
Commands: quit, cities, list, add, fetch, save
Enter command: add
Hotel City: Philadelphia
Hotel Name: Franklin
Number Rooms: 100
Room Rate: 200
Commands: quit, cities, list, add, fetch, save
Enter command: save
Formatter: b(inary), s(oap)s
Commands: quit, cities, list, add, fetch, save
Enter command: cities
Atlanta
Boston
Philadelphia
Commands: quit, cities, list, add, fetch, save
Enter command: list
City Name Rooms Rate
Atlanta Dixie 100 115
Atlanta Harriot 500 70
Boston Sheraton 250 95
Philadelphia Franklin 100 200
Commands: quit, cities, list, add, fetch, save
Enter command: quit

Перевод такой:

Введите команду: города
Атланта
Бостон
Команды: выход, города, список, добавить, выборка, сохранить
Введите команду: список
Город Название Номера Цена
Атланта Дикси 100 115
Атланта Мэриот 500 70
Бостон Шератон 250 95
Команды: выход, города, список, добавить, выборка, сохранить
Введите команду: добавить
Город Гостиницы: Филадельфия
Название Гостиницы: Фрэнклин
Номера: 100
Цена: 200
Команды: выход, города, список, добавить, выборка, сохранить
Введите команду: сохранить
Форматер: b(inary), s(oap)s
Команды: выход, города, список, добавить, выборка, сохранить
Введите команду: города
Атланта
Бостон
Филадельфия
Команды: выход, города, список, добавить, выборка, сохранить
Введите команду: список
Город Название Номера Цена
Атланта Дикси 100 115
Атланта Мзриот 500 70
Бостон Шератон 250 95
Филадельфия Фрэнклин 100 200
Команды: выход, города, список, добавить, выборка, сохранить
Введите команду: выход

Затем выполняем программу снова и восстанавливаем данные, сохраненныепри первом запуске.

Enter command: cities
Atlanta
Boston
Commands: quit, cities, list, add, fetch, save
Enter command: list
City Name Rooms Rate
Atlanta Dixie 100 115
Atlanta Marriot 500 70
Boston Sheraton 250 95
Commands: quit, cities, list, add, fetch, save
Enter command: fetch Formatter: b(inary), s(oap)s
City Name Rooms Rate
Atlanta Dixie 100 115
Atlanta Marriot 500 70
Boston Sheraton 250 95
Philadelphia Franklin 100 200
Commands: quit, cities, list, add, fetch, save
Enter command: cities
Atlanta
Boston
Philadelphia

Пере вод такой:

Введите команду: города
Атланта
Бостон
Команды: выход, города, список, добавить, выборка, сохранить
Введите команду: список
Город Название Номера Цена
Атланта Дикси 100 115
Атланта Мэриот 500 70
Бостон Шератон 250 95
Команды: выход, города, список, добавить, выборка, сохранить
Введите команду: выборка
Форматер: b(inary), s(oap)s
Город Название Номера Цена
Атланта Дикси 100 115
Атланта Мэриот 500 70
Бостон Шератон 250 95
Филадельфия Фрэнклин 100 200
Команды: выход, города, список, добавить, выборка, сохранить
Введите команду: города
Атланта
Бостон
Филадельфия


Объекты сериализации

страницы в данном разделе 
Глава 8. Классы каркаса .NET Framework Классы каркаса .NET Framework
Метаданные и отражение Класс туре (Тип)
Динамическое связывание Ввод и вывод в .NЕТ
Потоковые классы Примитивные типы данных и потоки
TextReader И TextWriter Обработка файлов
Сериализация, или преобразование в последовательную форму Объекты сериализации
ISerializable Модель приложений .NET
Поток Изоляция потоков
Синхронизация коллекций Контекст
Заместители и заглушки ContextBoundObject
Изоляция приложений Прикладная область
Прикладные области и сборки Класс AppDomain (Прикладная область)
События AppDomain (Прикладная область) Пример AppDomain (Прикладная область)
Маршализация, прикладные области и контексты Асинхронное программирование
Асинхронные шаблоны проектирования lAsyncResult
Использование делегатов в асинхронном программировании Организация поточной обработки с параметрами
Удаленный доступ Краткий обзор удаленного доступа
Удаленные объекты Активация
Пример удаленного объекта Пример программы, реализующей удаленный доступ
Метаданные и удаленный доступ Конфигурационные файлы удаленного доступа
Программируемые атрибуты Использование самостоятельно созданного атрибута
Определение класса атрибута Определение базового класса
Сборка мусора Уничтожение объектов
Неуправляемые ресурсы и освобождение ранее выделенной области памяти Поколения
Завершение и раскручивание стека Управление сборкой мусора с помощью класса сборщика мусора GC
Программа-пример Резюме


Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)



PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C



 
© faq.pp.ru, справочник программиста