Потоки данных
Все классы иерархии Stream поддерживают метод Close, освобождающий удерживаемые ресурсы операционной системы (например, файловые манипуляторы или сетевые соединения), поэтому практически во всех программах, работающих с потоками, рекомендуется закрывать поток в блоке Try-Catch-Finallу. Учтите, что вызов Close в секции Finally требует предварительной проверки, поскольку этот метод вызывается лишь для существующих объектов потоков, созданных успешным вызовом конструктора. Проверка перед вызовом Close в секции Finally выглядит примерно так:
Finally If Not (myFileStream Is Nothing) Then myFileStream.Close() End Try
Рассмотрите и такую возможность, как реализация IDisposable в классах, выполняющих операции с файлами, и закрытие всех открытых потоков методом Dispose.
Основные классы, производные от Stream, перечислены в табл. 9.8.
Таблица 9.8. Основные классы, производные от Stream.
Класс | Описание |
---|---|
FileStream | Произвольный доступ к файлам |
MemoryStream | Представляет блок памяти (часто используется при работе с буферами) |
NetworkStream | Данные, полученные в виде потока по сетевому соединению. Принадлежит пространству имен System.Net.Sockets |
CryptoStream | Шифровка и расшифровка данных. Принадлежит пространству имен System.Security.Cryptography |
BufferedStream | "Оболочка" для поддержки буферизации в потоках, не обладающих этой возможностью (при использовании позволяет задать размер буфера). Например, автоматическая буферизация ввода используется в файловых потоках, но отсутствует в сетевых потоках. Если потребуется организовать буферизацию для сетевого потока, воспользуйтесь классом BufferedStream и методикой, описанной далее в этой главе |
Примечание
В .NET Framework входят классы для работы с XML, спроектированные по образцу класса Stream. Впрочем, пространства имен XML в .NET велики и сложны, и о них вполне можно было бы написать отдельную книгу.