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