Модели обмена данных

Содержание

Слайд 2

System.IO

Простір імен System.IO містить набір типів для виконання операцій з файлами і

System.IO Простір імен System.IO містить набір типів для виконання операцій з файлами
іншими об’єктами введення-виведення.
Всі типи System.IO знаходяться в бібліотеці mscorlib.dll.
Більшість класів призначені для роботи з каталогами і файлами на диску, а також з буфером в оперативній пам’яті чи областями оперативної пам’яті

Слайд 3

System.IO Namespace -1

System.IO Namespace -1

Слайд 4

System.IO Namespace-2

System.IO Namespace-2

Слайд 5

The Abstract FileSystemInfo Base Class

The Abstract FileSystemInfo Base Class

Слайд 6

DirectoryInfo Type

DirectoryInfo Type

Слайд 7

FileInfo Class

FileInfo Class

Слайд 8

class Stream

stream (потік) – сутність, що використовується для роботи з блоками даних.

class Stream stream (потік) – сутність, що використовується для роботи з блоками

Stream - абстрактний клас для всіх потоків.
потік – це абстракція послідовності байтів, таких як файл, пристрій введення/виведення, область в оперативній пам’яті
клас Stream забезпечує як синхронну так і асинхронну взаємодію з середовищем зберігання даних (файлом на диску чи областю в оперативній пам’яті).
класи, похідні від Stream призначені для роботи з блоками двійкових даних, підтримують пошук в потоці даних.

Слайд 9

Основні операції

Читання з потоку – переміщення даних з потоку в структуру даних,

Основні операції Читання з потоку – переміщення даних з потоку в структуру
таку як масив бітів (Read(), ReadByte() ).
Запис в потік – переміщення даних зі структури даних в потік (Write(), WriteByte()).
Пошук – запит і модифікація поточної позиції в потоці (Seek() ).

Слайд 10

Public Properties

Public Properties

Слайд 11

Public Methods -1

Public Methods -1

Слайд 12

Public Methods -2

Public Methods -2

Слайд 13

class FileStream

Клас FileStream забезпечує реалізацію абстрактних членів класу Stream для роботи

class FileStream Клас FileStream забезпечує реалізацію абстрактних членів класу Stream для роботи
з файлами на диску.
дозволяє відкрити існуючі файли і створити нові, використовуються значення з перелічуваних типів FileMode, FileAccess, FileShare.

FileStream mys=new FileStream(“test.dat”,
FileMode.OpenOrCreate,FileAccess.ReadWrite);
mys.WriteByte((byte)6);
mys.Position=0;
Console.Write(mys.ReadByte());
mys.Close();

Слайд 14

Класи System.IO для роботи з символьними даними.

Абстрактні класи TextReader та TextWriter забезпечують

Класи System.IO для роботи з символьними даними. Абстрактні класи TextReader та TextWriter
похідним класам набір можливостей по зчитуванню та запису символьних даних. За замовчуванням ці типи працюють з кодуванням Unicode.
Класи StreamReader та StreamWriter дають змогу зчитувати та записувати символьні дані в потік.
Класи StringWriter i StringReader дозволяють звертатися до текстової інформації як до потоку в оперативній пам’яті.

Слайд 15

FileInfo f= new FileInfo(“temp.txt”);
//отримуємо об’єкт StreamWriter і записуємо в файл декілька рядків

FileInfo f= new FileInfo(“temp.txt”); //отримуємо об’єкт StreamWriter і записуємо в файл декілька
текcту
StreamWriter w=f.CreateText();
w.WriteLine(“First line”);
w.WriteLine(“Second line”);
for (int i=0;i<10;i++0;
{
w.Write(i+” “);
}
// вставляємо символ нового рядка
w.Write(w.NewLine);
w.Close();
//для зчитування інформації з файлу:
StreamReader r=File.OpenText(“temp.txt”);
string inp=r.ReadToEnd();
r.Close();

Слайд 16

What is Serialization?

Serialization

Deserialization

[Serializable]
public class Person
{

}

Person st1 = new

What is Serialization? Serialization Deserialization [Serializable] public class Person { … }
Person();
st1.FirstName = “Iryna";
st1.LastName = “Koval";
st1.BirthDate = new DateTime(1981, 8, 17);

Serialization (Серіалізація) – процес перетворення стану об’єкта (чи набору взаємопов’язаних об’єктів) в спеціальне представлення (наприклад, в форматі XML чи двійковому форматі), яке може бути розміщено в потік і далі відновлено з нього.
Deserialization (Десеріалізація) – зворотній процес відновлення об’єкта в його оригінальному стані з потоку байтів.

Слайд 17

Serialization/Deserialization найчастіше використовується для транспортування об’єктів (віддалена взаємодія) або зберігання об’єктів (в

Serialization/Deserialization найчастіше використовується для транспортування об’єктів (віддалена взаємодія) або зберігання об’єктів (в
файлі чи базі даних).
Серіалізація містить дані про стан об’єкта та його зв’язки з іншими класами, дані про збірку і ін.
Набір взаємопов’язаних об’єктів, сериалізованих в потік, називається графом об’єктів. Графи дозволяють фіксувати відношення між об’єктами

What is Serialization?

Слайд 18

В бібліотеці класів .NET є два окремі механізми серіалізації:
XmlSerializer (використовується для

В бібліотеці класів .NET є два окремі механізми серіалізації: XmlSerializer (використовується для
Web Services)
SoapFormatter/BinaryFormatter (для зберігання даних) * BinaryFormatter сериалізує об’єктний граф в компактному потоці двійкового формату
*SoapFormatter представляє граф як повідомлення протоколу SOAP ( Simple Object Access Protocol – простий протокол доступу до об’єктів) в форматі XML.
Можна здійснювати серіалізацію у власному форматі. Для цього клас повинен реалізувати інтерфейси IFormatter i ISerializable з простору імен System.Runtime.Serialization

Серіалізація об’єктів в .NET

Слайд 19

XmlSerializer, SoapFormatter чи BinaryFormatter

XmlSerializer
обмеження (для класу необхідність конструктора без параметрів,

XmlSerializer, SoapFormatter чи BinaryFormatter XmlSerializer обмеження (для класу необхідність конструктора без параметрів,
тільки public read/write властивості та поля можуть бути серіалізовані, вимагається додавання атрибуту [Serializable] до класу).
переваги (добра підтримка для налаштування XML документів)
XmlSerializer найбільш зручна для міжплатформової роботи або для конструювання об’єктів з існуючих XML документів.
SoapFormatter і BinaryFormatter
обмеження (вимагається додавання атрибуту [Serializable] до класу)
переваги (можуть серіалізувати приватні поля)
BinaryFormatter найбільш ефективний спосіб при здійсненні серіалізації-десеріалізації на платформі .NET.

Слайд 20

class XmlSerializer

серіалізує і десеріалізує лише поля і властивості, оголошені public, ігнорує інші
клас

class XmlSerializer серіалізує і десеріалізує лише поля і властивості, оголошені public, ігнорує
для серіалізації – public, з конструктором без аргументів, використовується відображення
поля складних типів серіалізуються як вкладені, ті ж вимоги до класу
для ігнорування відкритого поля атрибут [XmlIgnore]
XmlSerializer не застосовна для класів, що реалізують інтерфейс IDictionary, наприклад Hashtable.

Слайд 21

public class XmlSerializer

Namespace: System.Xml.Serialization

public class XmlSerializer Namespace: System.Xml.Serialization

Слайд 22

Public Method Serialize

Серіалізує об’єкт в документ XML.

Public Method Serialize Серіалізує об’єкт в документ XML.

Слайд 23

Public Method Deserialize

Десеріалізація XML документа.

Public Method Deserialize Десеріалізація XML документа.

Слайд 24

const string strFilter = "Person XML files(*.PersonXml)|" +
"*.PersonXml|All files (*.*)|*.*";
XmlSerializer xmlser

const string strFilter = "Person XML files(*.PersonXml)|" + "*.PersonXml|All files (*.*)|*.*"; XmlSerializer
= new XmlSerializer(typeof(Person));

void FileSaveAsOnClick(object objSrc, EventArgs args)
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = strFilter;
if (dlg.ShowDialog() == DialogResult.OK)
{
StreamWriter sw = new StreamWriter(dlg.FileName);
xmlser.Serialize(sw, personpnl.Person);
sw.Close();
}
}

Слайд 25

визначений в просторі імен System.Runtime.Serialization.Formatters.Binary
серіалізує об’єктний граф в компактному потоці двійкового формату
Для

визначений в просторі імен System.Runtime.Serialization.Formatters.Binary серіалізує об’єктний граф в компактному потоці двійкового
маркування членів, що не повинні серіалізуватися – атрибут [NonSerialized]
Конструктор не викликається при десеріалізації

BinaryFormatter

Слайд 26

BinaryFormatter

MyObject obj = new MyObject();
obj.n1 = 1;
obj.n2 = 24;
obj.str = "Some String";
IFormatter

BinaryFormatter MyObject obj = new MyObject(); obj.n1 = 1; obj.n2 = 24;
formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();

IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
MyObject obj = (MyObject) formatter.Deserialize(stream);
stream.Close();
Console.WriteLine("n1: {0}", obj.n1);
Console.WriteLine("n2: {0}", obj.n2);
Console.WriteLine("str: {0}", obj.str);

[Serializable]
public class MyObject {
public int n1 = 0;
public int n2 = 0;
public String str = null;
}

Имя файла: Модели-обмена-данных-.pptx
Количество просмотров: 124
Количество скачиваний: 0