Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2-й семестр / Лекции / Тема 6.3 Работа с файлами в C#.ppt
Скачиваний:
97
Добавлен:
12.03.2016
Размер:
906.24 Кб
Скачать

Класс BinaryFormatter

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

Чтобы объект определенного класса можно было сериализовать, надо этот класс пометить атрибутом Serializable:

При отстутствии данного атрибута объект не сможет быть сериализован, и при попытке сериализации будет выброшено исключение SerializationException.

Хотя сериализация представляет собой преобразование объекта в некоторый набор байтов, но в действительности только бинарным форматом она не ограничивается. В .NET можно использовать и другие форматы сериализации. Мы рассмотрим сериализацию в бинарный формат, которую

описывает класс BinaryFormatter. Класс BinaryFormatter определен в пространстве имен System.Runtime.Serialization.Formatters.Binary.

Для сериализации будет использоваться метод Serialize, который в качестве параметров принимает поток, куда помещает сериализованные данные (например, бинарный файл), и объект, который надо сериализовать. А для десериализации будет применяться метод Deserialize, который в качестве параметра принимает поток с сериализованными данными.

21

Класс BinaryFormatter

В примере 6 класс Person объявлен с атрибутом Serilizable. Благодаря этому его объекты будут доступны для сериализации. Далее создается объект BinaryFormatter: BinaryFormatter formatter = new BinaryFormatter(); Затем последовательно выполняется сериализация и десериализация. Для

обоих операций нужен поток, в который либо сохранять, либо из которого считывать данные. Данный поток представляет объект FileStream, который записывает объект Person в файл persons.dat.

Сериализация выплняется методом formatter.Serialize(fs, person), который добавляет все данные об объекте Person в файл persons.dat.

При десериализации нужно еще преобразовать объект, возвращаемый методом Deserialize, к типу Person:(Person)formatter.Deserialize(fs).

Сериализация значительно упрощает процесс сохранения объектов в бинарную форму по сравнению, например, с использованием связки классов BinaryWriter/BinaryReader.

В примере 7 сериализуется массив объектов класса Person.

22

Класс BinaryFormatter

Пример 7:

23

Класс BinaryFormatter

Пример 7:

24

Контрольные вопросы

1.Классы File и FileInfo: назначение, основные методы. Пример использования .

2.Класс FileStream: назначение, основные методы. Пример использования.

3.Классы StreamReader и StreamWriter: назначение, примеры использования.

4.Классы BinaryWriter и BinaryReader: назначение, примеры использования.

5.Класс BinaryFormatter : назначение, основные методы, примеры использования.

25