- •Программирование
- •Классы File и FileInfo
- •Классы File и FileInfo
- •Класс FileStream
- •Класс FileStream
- •Класс FileStream
- •Класс FileStream
- •Классы StreamReader и StreamWriter
- •Классы StreamReader и StreamWriter
- •Классы StreamReader и StreamWriter
- •Классы StreamReader и StreamWriter
- •Классы StreamReader и StreamWriter
- •Классы StreamReader и StreamWriter
- •Классы BinaryWriter и BinaryReader
- •Классы BinaryWriter и BinaryReader
- •Классы BinaryWriter и BinaryReader
- •Классы BinaryWriter и BinaryReader
- •Классы BinaryWriter и BinaryReader
- •Класс BinaryFormatter
- •Класс BinaryFormatter
- •Класс BinaryFormatter
- •Класс BinaryFormatter
- •Класс BinaryFormatter
- •Класс BinaryFormatter
- •Контрольные вопросы
Класс 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