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-данными.

 


Связанные темы