Чтобы немного рассказать о других ответах здесь, и объясните, как много кода примера вы увидите пунктиром, большую часть времени вы не читаете и не записываете в поток напрямую. Потоки - это средства низкого уровня для передачи данных.
Вы заметите, что функции для чтения и записи все ориентированы по байтам, например. WriteByte(). Нет функций для работы с целыми числами, строками и т. Д. Это делает поток очень универсальным, но менее простым в работе, если, скажем, вы просто хотите передать текст.
Однако .NET предоставляет классы, которые преобразуют между нативными типами и интерфейсом потока низкого уровня, и передает данные в поток или из потока для вас. Некоторые известные такие классы:
StreamWriter // Badly named. Should be TextWriter.
StreamReader // Badly named. Should be TextReader.
BinaryWriter
BinaryReader
Чтобы использовать их, сначала вы получаете свой поток, то вы создаете одну из представленных выше классов и связать его с потоком. Например.
MemoryStream memoryStream = new MemoryStream();
StreamWriter myStreamWriter = new StreamWriter(memoryStream);
StreamReader и StreamWriter конвертировать между собственными типами и их строковые представления затем передать строки и из потока в байтах. Таким образом,
myStreamWriter.Write(123);
будет писать «123» (три символа «1», «2», затем «3») в поток. Если вы имеете дело с текстовыми файлами (например, html), StreamReader и StreamWriter - это классы, которые вы будете использовать.
В то время как
myBinaryWriter.Write(123);
будет написать четыре байта, представляющие 32-битное целое значение 123 (0x7B, 0x00, 0x00, 0x00). Если вы имеете дело с бинарными файлами или сетевыми протоколами, то вы можете использовать BinaryReader и BinaryWriter. (Если вы обмен данных с сетями или другими системами, необходимо иметь в виде endianness, но это еще один пост.)
вы можете проверить http://stackoverflow.com/questions/507747/can-you-explain-the-concept-of-streams – Preets
Возьмите массив байтов, а затем создайте для него оболочку ('Stream'), который предоставляет некоторые полезные методы, такие как чтение, запись и изменение позиции. Теперь вы можете создавать классы на основе их резервного хранилища (FileStream, MemoryStream), которые наследуют от «Потока» и основываются на этой функциональности на основе конкретного хранилища резервных копий. –