На самом низком уровне ввод-вывод в 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связано со стандартным потоком сообщений об ошибках, которые по умолчанию также выводятся на консоль. Но эти потоки могут быть переадресованы на любое другое совместимое устройство ввода-вывода. Стандартные потоки являются символьными. Поэтому в эти потоки выводятся и вводятся из них символы.

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

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

Основные классы потоков определены в пространстве именSystem. 10.Длятого чтобы воспользоваться этими классами, как правило, достаточно ввести приведенный ниже оператор в самом начале программы.

using System.10;

Пространство именSystem. 10не указывается для консольного ввода-вывода потому, что для него определен классConsoleв пространстве именSystem.

Класс Stream    '

Перейти на страницу:

Похожие книги