БАЙТОВЫЕ И СИМВОЛЬНЫЕ ПОТОКИ


Организация С#-системы ввода-вывода

Понятие потока

Внешние устройства делятся на:

• Устройства ввода-вывода (дисплей, клавиатура, принтер, последовательный порт, мышь, сканер и т.д.)

• Запоминающие устройства последователь­ного доступа (стример)

• Запоминающие устройства прямого доступа (МД, CD-ROM, DVD-ROM);

С#-программы выполняют операции ввода-вывода посредством потоков. С точки зрения концепции ввода/вывода, поток (stream) — это абстракция, которая определяется как последова­тельность байтов, участвующих в операции ввода/вывода и независящая от устройства.

С точки зрения реализации, поток – это объект, используемый для передачи данных.

Концепция передачи данных отделена от конкретного источника, поэтому источники можно заменять. Внешним источником может быть даже переменная программы. Характер поведения всех потоков одинаков, поэтому создано множество обобщенных методов, предназначенных для перемещения данных между внешними источниками и переменными программы. Нюансы различных физических устройств потоковыми методами во внимание не принимаются.

Следовательно, классы и методы, работающие с потоками, можно применить ко многим типам устройств. Например, методы, используемые для записи данных на консольное устройство, также можно использовать для записи в дисковый файл.


рис.1

На самом низком уровне все С#-системы ввода-вывода оперируют байтами. На физическом уровне Windows используется буферизация и кэширование записей. Их целью является:

• согласование ввода/вывода с характеристиками внешнего устройства;

• повышение эффективности системы, за счет уменьшения количества операций ввода/вывода с внешними устройствами, например, с диском.

Буферизованный ввод-вывод:


строка
блок

символ

 

рис.2

 

Буфер заполняется блоками (кластерами): первый раз при открытии файла для чтения.

Буферов может быть несколько.

 

 


рис. 3

 

Синхронный и асинхронный ввод/вывод

Как правило, после запуска операции ввода-вывода программа переходит в состояние ожидания и выходит из него только после завершения обмена. Такой способ выполнения операций ввода-вывода называется синхронным.

Однако продолжительный ввод-вывод целесообразно выполнять в асинхронном режиме, когда программа не блокируется, а продолжает выполняться. Асинхронный режим реализуется с помощью подпрограммы обратного вызова (на рис.4 – ПОВ). Об этом пойдет речь в других лекциях.

 

 

рис.4

Стандартные потоки

В С# определен ряд классов, которые преобразуют байтовый поток в символьный, и наоборот, выполняя byte-char- и char-byte-перевод автоматически.

Наряду с байтовыми и символьными потоками существуют двоичные потоки.

Кроме потоков, создаваемых программами, в Windows существуют несколько встроенных (стандартных) потоков.

Эти потоки не надо создавать, они всегда доступны программам.

Классы потоков

Все классы потоков (кроме стандартных) определены в пространстве имен System.IO.

 

Центральную часть байтовой потоковой С#-системы занимает класс System.IO.Stream.



Дата добавления: 2019-02-08; просмотров: 720;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.