Seek (). Для того чтобы определить возможности потока, придется воспользоваться одним, а то и несколькими свойствами класса Stream. Эти свойства перечислены в табл. 14.2 наряду со свойствами Length и Position, содержащими длину потока и текущее положение в нем.

Таблица 14.2. Свойства, определенные в классе Stream

Свойство

Описание

bool CanRead bool CanSeek

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

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

Свойство

Описание

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#

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату