Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 387

Эндрю Троелсен

Абстрактный класс System.IO.Stream определяет ряд членов, обеспечивающих поддержку синхронного и асинхронного взаимодействия с носителем данных (скажем, с файлом или областью памяти). На рис. 16.6 показано несколько потомков типа Stream.

Рис. 16.6. Типы, производные от Stream

Замечание. Следует знать, что понятие потока применимо не только к файлам или области памяти. Без сомнения, библиотеки .NET обеспечивают потоковый доступ к сетям и другим связанным с потоками абстракциям.

Напомним, что потомки stream представляют данные в виде "сырого" потока байтов, поэтому работа с потоками может быть весьма непонятной. Некоторые относящиеся к Stream типы поддерживают поиск – этот термин, по сути, означает процесс получения он изменения текущей позиции в потоке. Чтобы понять функциональные возможности, предлагаемые классом Stream, рассмотрите его базовые члены, описанные в табл. 16.6.

Таблица 16.6. Абстрактные члены Stream

Члены Описание
CanRead CanSeek CanWrite Определяет, поддерживает ли текущий поток чтение, поиск и/или запись
Close() Завершает текущий поток и освобождает все связанные с текущим потоком ресурсы (например, сокеты и дескрипторы файлов)
Flush() Обновляет связанный источник данных или хранилище в соответствии с текущим состоянием буфера, а затем очищает буфер. Если поток не реализует буфер, этот метод не делает ничего
Length Возвращает длину потока в байтах
Position Определяет позицию в текущем потоке
Read() ReadByte() Читает последовательность байтов (или один байт) из текущего потока и сдвигает указатель позиции в соответствии со считанным числом байтов
Seek() Устанавливает указатель в заданную; позицию в текущем потоке
SetLength() Устанавливает длину текущего потока
Write() WriteByte() Записывает последовательность байтов (или один байт) в текущий поток и сдвигает указатель позиции в соответствии со считанным числом байтов

Работа с FileStream

Класс FileStream обеспечивает реализацию абстрактных членов Stream в виде, подходящем для файловых потоков. Это довольно примитивный поток – он может читать или записывать только один байт или массив байтов. На самом деле необходимость непосредственного взаимодействия с членами типа FileStream возникает очень редко. Вы чаще будете использовать различные упаковщики потоков, которые упрощают работу с текстовыми данными или типами .NET. Однако для примера давайте поэкспериментируем со средствами синхронного чтения/записи типа FileStream.