C#. Поняття потоку. Архітектура потоків у C#. Потоки з опорними сховищами. Потоки з декораторами. Адаптери потоків

Поняття потоку. Архітектура потоків у C#. Потоки з опорними сховищами. Потоки з декораторами. Адаптери потоків


Зміст


Пошук на інших ресурсах:




1. Що таке потік у програмуванні? Поняття потоку

У програмуванні потік (stream) – це логічний пристрій, що передбачає:

  • споживання (отримання) інформації. У цьому випадку визначають термін потік вводу;
  • вироблення (передача) інформації. У цьому випадку визначають термін потік виводу.

Потік являє собою абстракцію, яка забезпечує ввід/вивід інформації у програмі. Система вводу/виводу зв’язує потік з фізичним пристроєм (рисунок 1). Робота потоку на ввід чи на вивід містить однаковий набір команд незалежно від фізичного пристрою. Так, наприклад, вивід на принтер чи екран здійснюється однаковими викликами функцій або вивід на консоль працює так само як і вивід у файл. В свою чергу, одна й та ж функція може працювати з різними типами фізичних пристроїв.

C#. Потоки. Взаємодія потоку з різними типами фізичних пристроїв вводу/виводу (принтер, віддалений комп’ютер, файл)

Рисунок 1. Взаємодія потоку з різними типами фізичних пристроїв вводу/виводу (принтер, віддалений комп’ютер, файл)

 

2. Архітектура потоків у .NET. Категорії потоків

В технології .NET потоки поділяються на дві основні категорії (рисунок 2):

  • потоки з опорним сховищами;
  • потоки з декораторами.

Потоки з опорними сховищами реалізують конкретний вид сховища, яким може бути:

  • файл;
  • пам’ять;
  • мережа;
  • ізольоване сховище.

Потоки з декораторами реалізують модифікацію даних, які передаються в опорні сховища. Прикладами такої модифікації можуть бути:

  • шифрування даних перед відправкою в мережі;
  • архівування даних;
  • стиснення даних та їх розпакування відомими алгоритмами;
  • буферизація даних.

Для модифікації вже існуючого потоку, потоки з декораторами використовують підхід, що закладений в паттерні Декоратор. Подібні схеми використання паттерну Декоратор застосовуються і в інших мовах програмування (наприклад, Java).

C#. Архітектура потоків .NET

Рисунок 2. Архітектура потоків у .NET

Обидві категорії потоків працюють виключно з байтами. Для представлення байтів у текстовому, зрозумілому для людини, вигляді, використовуються адаптери потоків.

 

3. Потоки з опорними сховищами. Огляд

Потоки з опорними сховищами зв’язані з визначеним типом сховища: файли, пам’ять, мережа тощо. Основні потоки з опорними сховищами представлені наступними класами:

  • FileStream – клас, що забезпечує потік для файлу. Клас містить різноманітні засоби обробки файлів. Ці засоби забезпечують як синхронне та асинхронне читання з файлу, так і синхронний та асинхронний запис у файл;
  • IsolatedStorage – абстрактний клас, який служить базовим для класів, що реалізують доступ до ізольованого сховища для файлів;
  • MemoryStream – клас, що призначений для обробки потоків, які розміщуються у пам’яті;
  • NetworkStream – клас, що містить засоби представлення потоку даних в мережі.

 

4. Потоки з декораторами. Огляд

Потоки з декораторами реалізують модифікацію (трансформацію) даних, що передаються в опорні сховища для зберігання чи іншого використання. Потоки з декораторами використовують паттерн Декоратор для модифікації існуючого потоку даних в потрібний. Нижче перераховано основні класи, які забезбпечують роботу потоків з декораторами:

  • BufferedStream – клас, що містить засоби буферизації при читанні даних з потоку та запису даних у потік. Читання/запис даних здійснюється через буфер – ділянку пам’яті заданого розміру;
  • DeflateStream – клас, що забезпечує методи для стиснення та розпакування потоків даних. Клас використовує Deflate-алгоритм стиснення без втрат;
  • GZipStream – клас, що реалізує методи та властивості для стиснення/розпакування даних потоку на основі специфікації формату даних GZip;
  • CryptoStream – клас, що здійснює над потоком даних криптографічні перетворення.

Потоки з декораторами виділені в окремий розділ класів в архітектурі .NET. Таке представлення дає наступні переваги:

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

 

5. Адаптери потоків. Призначення. Огляд

Адаптери потоків відносяться до більш високого рівня взаємодії з програмою. Вони дозволяють конвертувати байтові потоки (потоки з декораторами, потоки з опорними сховищами) у конкретний формат.
Адаптери потоків працюють за єдиним принципом: вони поміщають байтовий потік в оболонку адаптерного класу з відповідними методами. Ці методи виконують конвертування байтового потоку даних до потрібного формату (наприклад, отримання XML-формату даних).

Нижче перераховано основні класи, що відносяться до адаптерів потоків:

  • TextReader – абстрактний клас, що може читати послідовності символів;
  • TextWriter – абстрактний клас, що може записувати послідовності символів;
  • StreamReader – клас, що реалізує TextReader;
  • StreamWriter – клас, який реалізує абстрактний клас TextWriter. Клас містить засоби для запису символів у потік в заданому кодуванні;
  • BinaryReader – клас, що містить методи читання примітивних типів даних (int, float, double тощо) в заданій системі кодування;
  • BinaryWriter – клас, що реалізує методи запису примітивних типів даних (int, float, byte тощо) та рядків у заданій системі кодування;
  • XmlReader – клас, що містить засоби некешованого зчитування XML-даних;
  • XmlWriter – клас, що містить засоби запису потоків або файлів з XML-даними.

 


Зв’язані теми