Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
BinaryWriter(StreamoutputStream)
BinaryReader(StreaminputStream) Здесь параметр outputStream означает поток, в который будут записываться двоичные данные, а inputStream – поток, из которого будут считываться данные. Чтобы записать данные в файл или прочитать данные из файла, можно использовать для этих параметров объект класса FileStream. В классе BinaryWriter определены методы, способные записывать значения всех встроенных C#-типов (некоторые из них перечислены в таблице), а также стандартные методы Close() и Flush(), работа которых описана выше.
В классе BinaryReader предусмотрены методы для считывания всех простых C#-типов. Наиболее часто используемые из них приведены в таблице. Также в этом классе определен стандартный метод Close().
Сериализация объектов Как уже было сказано, в пространстве имен System.IO предусмотрено множество типов, которые позволяют записывать двоичные и символьные данные в какое-то место для хранения (например, файл на диске или буфер в памяти) и считывать их. Однако среди них не существует типов, которые позволяют сохранять объекты классов целиком и затем восстанавливать их. Об этом процессе, который называется сериализацией, и пойдет речь далее. Сериализация(serialization)– это термин, описывающий процесс преобразования объекта в линейную последовательность байтов. Обратный процесс, когда из потока байтов, содержащего всю необходимую информацию, объект восстанавливается в исходном виде, называется десериализацией (deserialization). Чтобы можно было провести сериализацию объекта, каждый класс, который будет участвовать в сериализации, должен обладать атрибутом [Serializable]. Если же необходимо, чтобы какие-либо переменные данного класса были исключены из сериализации, достаточно просто пометить их как [NonSerialized]. Обычно так отмечаются те данные класса, которые «запоминать» не нужно (к примеру, те, которые на самом деле являются константами). Например: [Serializable] ClassMyClass { publicint x; [NonSerialized] private double pi = 3.14; ... } После этого необходимо выбрать формат, в котором будет сохранен объектный граф. По умолчанию можно использовать один из двух форматов. Класс BinaryFormatterсериализует объект в компактном потоке двоичного формата, в то время как класс SoapFormatter представляет объект как сообщение протокола SOAP (SimpleObjectAccessProtocol – простого протокола доступа к объектам) в формате XML. При необходимости можно создать свой собственный формат сериализации (и соответствующий ему объект Formatter). Здесь рассматривается сериализация объектов в двоичном формате. Она производится при помощи класса BinaryFormatter, который определен в пространстве имен System.Runtime.Serialization.Format-ters.Binary. Для записи объекта в место хранения и восстановления объекта по сохраненной информации используются два главных метода этого класса:
Пример выполнения работы Задание. Добавить в программу предыдущей лабораторной работы возможность сохранения данных в файл и чтения из файла. Исходную коллекцию данных (массив points) необходимо сохранять в файл в двоичном виде, а также предусмотреть ее сериализацию. Коллекцию-результат (массив res) сохранить в текстовый файл.
Визуальное проектирование диалогового окна Для реализации вышеуказанных действий на форму добавляется меню (компонент MenuStrip). Структура меню приведена на рисунке 4.4.
Рис. 4.4. Меню приложения
Для обеспечения возможности выбора пользователем имен файлов для открытия и сохранения в приложение необходимо добавить компоненты OpenFileDialog и SaveFileDialog. При необходимости можно указать для них фильтр (свойство Filter), например, так: Файлы данных|*.dat|Все файлы|*.* |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2018-06-01; просмотров: 171. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |