This article has been localized into Russian by the community.
Введение
В платформе .NET, для широкого диапазона источников и получателей данных, всякий раз, когда вы к ним обращаетесь, применяется концепция Потоков (Streams) , в частности, для операций чтения/записи в памяти, с использованием файла или сетевого соединения, да, в принципе, в любой ситуации, когда вы хотите передать байты из одного места в другое.
Работая в платформе .NET c различными классами, связанными с операциями ввода-вывода, Вы заметите, что эти классы включают методы, принимающие параметр типа Stream. Stream — это базовый класс для работы со строками, и он может принимать различные производные формы, в частности: MemoryStream или FileStream, что мы увидим в следующих статьях. Однако, собственно класс Stream является абстрактным, то есть, Вы не сможете создать экземпляр этого класса — он служит базовым классом для различных типов потоков.
Большинство производных от Stream классов могут делать три вещи: чтение, запись и поиск (перемещение для чтения или записи на новую позицию в потоке вместо текущей). Для решения, может ли производный класс это выполнить, класс Stream реализует три метода: CanRead, CanWrite и CanSeek. Чтобы убедиться, что необходимая Вам операция (например, чтение), доступна для потока, с которым вы работаете, Вы всегда можете обратиться к этим его свойствам.
Всегда, как только вы заканчиваете работать с потоком, он должен быть закрыт. В противном случае он может блокировать ресурс, например, файл при использовании FileStream, который должен быть освобожден. Базовый класс Stream реализует интерфейс IDisposable, таким образом, для освобождения ресурса достаточно просто вызвать метод Dispose(), но, возможно, лучшим решением является инкапсуляция процесса использования потока в блоке using() (именно такой подход мы будем использовать в этом руководстве).
Классы для потокового чтения и записи
Обычно потоки используются в качестве фонового источника для одного из классов чтения или записи, например, FileReader или BinaryWriter. Вы можете передавать потоки новым экземплярам этих классов, например: прочитать файл целиком, произвести с ним манипуляции в памяти и, затем, записать его обратно, — да тут открывается множество возможностей. В следующих статьях мы увидим, как это работает .
Резюме
Поток — это в основном механизм для перемещения байтов из одного места в другое, например, в файл или из какого-то сетевого ресурса. Для всего этого платформа .NET использует как базовый абстрактный класс Stream, предлагающий несколько порождаемых реализаций, в частности, FileStream и MemoryStream, которые мы обсудим в следующих статьях.