Чтение онлайн

ЖАНРЫ

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

bool CanWrite

Принимает значение true, если в поток можно вывести данные. До

ступно только для чтения

long Length

Содержит длину потока. Доступно только для чтения

long Position

Представляет текущее положение в потоке. Доступно как для чтения,

так и для записи

int ReadTimeout

Представляет

продолжительность времени ожидания в операциях

ввода. Доступно как для чтения, так и для записи

int' WriteTimeout

Представляет продолжительность времени ожидания в операциях

вывода. Доступно как для чтения, так и для записи

Классы байтовых потоков

Производными от класса Stream являются несколько конкретных классов байтовых потоков. Эти классы определены в пространстве имен System. 10 и перечислены ниже.

Класс потока

Описание

BufferedStream

Заключает в оболочку байтовый поток и добавляет буфериза

цию. Буферизация, как правило, повышает производительность

FileStream

Байтовый поток, предназначенный для файлового ввода-

вывода

MemoryStream

Байтовый поток, использующий память для хранения данных

UnmanagedMemoryStream

Байтовый поток, использующий неуправляемую память для

хранения данных

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

Классы-оболочки символьных потоков

Для создания символьного потока достаточно заключить байтовый поток в один из классов-оболочек символьных потоков. На вершине иерархии классов символьных потоков находятся абстрактные классы TextReader и TextWriter. Так, класс TextReader организует ввод, а класс TextWriter — вывод. Методы, определенные в обоих этих классах, доступны для всех их подклассов. Они образуют минимальный набор функций ввода-вывода, которыми должны обладать все символьные потоки.

В табл. 14.3 перечислены методы ввода, определенные в классе TextReader. В целом, эти методы способны генерировать исключение IOException при появлении ошибки ввода, а некоторые из них — исключения других типов. Особый интерес вызывает метод ReadLine , предназначенный для ввода целой текстовой строки, возвращая ее в виде объекта типа string. Этот метод удобен для чтения входных данных, содержащих пробелы. В классе TextReader имеется также метод Close , определяемый

следующим образом.

Этот метод закрывает считывающий поток и освобождает его ресурсы.

В классе TextWriter определены также варианты методов Write и WriteLine , предназначенные для вывода данных всех встроенных типов. Ниже в качестве примера перечислены лишь некоторые из перегружаемых вариантов этих методов.

virtual void Close virtual void Flush

Метод Flush организует вывод в физическую среду всех данных, оставшихся в выходном буфере. А метод Close закрывает записывающий поток и освобождает его ресурсы.

Классы TextReader и TextWriter реализуются несколькими классами символьных потоков, включая и те, что перечислены ниже. Следовательно, в этих классах потоков предоставляются методы и свойства, определенные в классах TextReader и TextWriter.

Двоичные потоки

Помимо классов байтовых и символьных потоков, имеются еще два класса двоичных потоков, которые могут служить для непосредственного ввода и вывода двоичных данных — BinaryReader и BinaryWriter. Подробнее о них речь пойдет далее в этой главе, когда дойдет черед до файлового ввода-вывода.

А теперь, когда представлена общая структура системы ввода-вывода в С#, отведем оставшуюся часть этой главы более подробному рассмотрению различных частей данной системы, начиная с консольного ввода-вывода.

Консольный ввод-вывод

Консольньгй ввод-вывод осуществляется с помощью стандартных потоков, представленных свойствами Console. In, Console. Out и Console. Error. Примеры консольного ввода-вывода были представлены еще в главе 2, поэтому он должен быть вам уже знаком. Как будет показано ниже, он обладает и рядом других дополнительных возможностей.

Но прежде следует еще раз подчеркнуть, что большинство реальных приложений C# ориентированы не на консольный ввод-вывод в текстовом виде, а на графический оконный интерфейс для взаимодействия с пользователем, или же они представляют собой программный код, используемый на стороне сервера. Поэтому часть системы ввода-вывода, связанная с консолью, не находит широкого практического применения. И хотя программы, ориентированные на текстовый ввод-вывод, отлично подходят в качестве учебных примеров, коротких сервйсньгх программ или определенного рода программных компонентов, для большинства реальных приложений они не годятся.

Чтение данных из потока ввода с консоли

Поток Console. In является экземпляром объекта класса TextReader, и поэтому для доступа к нему могут быть использованы методы и свойства, определенные в классе TextReader. Но для этой цели чаще все же используются методы, предоставляемые классом Console, в котором автоматически организуется чтение данных из потока Console. In. В классе Console определены три метода ввода. Два первых метода, Read () и ReadLine , были доступны еще в версии .NET Framework 1.0. А третий метод, ReadKey , был добавлен в версию 2.0 этой среды.

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