Организация С#-системы ввода-вывода
Понятие потока
Внешние устройства делятся на:
• Устройства ввода-вывода (дисплей, клавиатура, принтер, после- довательный порт, мышь, сканер и т.д.)
• Запоминающие устройства последовательного доступа (стример)
• Запоминающие устройства прямого доступа (МД, CD-ROM, DVD- ROM);
С#-программы выполняют операции ввода-вывода посредством пото- ков. С точки зрения концепции ввода/вывода, поток (stream) — это аб- стракция, которая определяется как последовательность байтов, участ- вующих в операции ввода/вывода и независящая от устройства.
С точки зрения реализации, поток – это объект, используемый для передачи данных.
Концепция передачи данных отделена от конкретного источника, по- этому источники можно заменять. Внешним источником может быть даже переменная программы. Характер поведения всех потоков одинаков, по- этому создано множество обобщенных методов, предназначенных для перемещения данных между внешними источниками и переменными про- граммы. Нюансы различных физических устройств потоковыми методами во внимание не принимаются.
Следовательно, классы и методы, работающие с потоками, можно применить ко многим типам устройств. Например, методы, используемые для записи данных на консольное устройство, также можно использовать для записи в дисковый файл.
![]() |
рис.1
На самом низком уровне все С#-системы ввода-вывода оперируют байтами. На физическом уровне Windows используется буферизация и кэширование записей. Их целью является:
• согласование ввода/вывода с характеристиками внешнего устрой- ства;
• повышение эффективности системы, за счет уменьшения количе- ства операций ввода/вывода с внешними устройствами, например, с диском.
Буферизованный ввод-вывод:
Windows
NTFS
блок
буфер ОС
строка символ
рис.2
Буфер заполняется блоками (кластерами): первый раз при открытии файла для чтения.
Буферов может быть несколько.
Буферы
см. Flush
рис. 3
Синхронный и асинхронный ввод/вывод
Как правило, после запуска операции ввода-вывода программа пере- ходит в состояние ожидания и выходит из него только после завершения обмена. Такой способ выполнения операций ввода-вывода называется синхронным.
Однако продолжительный ввод-вывод целесообразно выполнять в асинхронном режиме, когда программа не блокируется, а продолжает выполняться. Асинхронный режим реализуется с помощью подпрограммы обратного вызова (на рис.4 – ПОВ). Об этом пойдет речь в других лекци- ях.
рис.4
0
t
Стандартные потоки
В С# определен ряд классов, которые преобразуют байтовый поток в символьный, и наоборот, выполняя byte-char- и char-byte-перевод авто- матически.
Наряду с байтовыми и символьными потоками существуют двоичные потоки.
Кроме потоков, создаваемых программами, в Windows существуют не- сколько встроенных (стандартных) потоков.
Эти потоки не надо создавать, они всегда доступны программам.
© ООО «Знанио»
С вами с 2009 года.