Ввод-вывод в программах на C# осуществляется посредством потоков. Поток — это некая абстракция производства или потребления информации. С физическим устройством поток связывает система ввода-вывода. Все потоки действуют одинаково — даже если они связаны с разными физическими устройствами. Поэтому классы и методы ввода-вывода могут применяться к самым разным типам устройств. Например, методами вывода на консоль можно пользоваться и для вывода в файл на диске.
На самом низком уровне ввод-вывод в C# осуществляется байтами. И делается это потому, что многие устройства ориентированы на операции ввода-вывода отдельными байтами. Но человеку больше свойственно общаться символами. Напомним, что в C# тип char
является 16-разрядным, а тип byte
— 8-разрядным. Так, если в целях ввода- вывода используется набор символов в коде ASCII, то для преобразования типа char
в тип byte
достаточно отбросить старший байт значения типа char
. Но это не годится для набора символов в юникоде (Unicode), где символы требуется представлять двумя, а то и больше байтами. Следовательно, байтовые потоки не совсем подходят для организации ввода-вывода отдельными символами. С целью разрешить это затруднение в среде .NET Framework определено несколько классов, выполняющих превращение байтового потока в символьный с автоматическим преобразованием типа byte
в тип char
и обратно.
Для всех программ, в которых используется пространство имен System
, доступны встроенные потоки, открывающиеся с помощью свойств Console.In
, Console.Out
и Console.Error
. В частности, свойство Console.Out
связано со стандартным потоком вывода. По умолчанию это поток вывода на консоль. Так, если вызывается метод Console.WriteLine()
, информация автоматически передается свойству Console.Out
. Свойство Console.In
связано со стандартным потоком ввода, который по умолчанию осуществляется с клавиатуры. А свойство Console.Error
связано со стандартным потоком сообщений об ошибках, которые по умолчанию также выводятся на консоль. Но эти потоки могут быть переадресованы на любое другое совместимое устройство ввода-вывода. Стандартные потоки являются символьными. Поэтому в эти потоки выводятся и вводятся из них символы.
Применение средств ввода-вывода | Классы потоков |