Производными от класса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.

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

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

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