Поиск…


Использование потоков

Поток - это объект, который обеспечивает низкоуровневое средство для передачи данных. Они сами не действуют как контейнеры данных.

Данные, с которыми мы имеем дело, находятся в форме байтового массива ( byte [] ). Функции для чтения и записи ориентированы по WriteByte() , например WriteByte() .

Нет функций для работы с целыми числами, строками и т. Д. Это делает поток очень универсальным, но менее простым в работе, если, скажем, вы просто хотите передать текст. Потоки могут быть особенно полезными, когда вы имеете дело с большим объемом данных.

Нам нужно будет использовать другой тип Stream, на котором он должен быть записан / прочитан (т. Е. Хранилище резервных копий). Например, если источником является файл, нам нужно использовать FileStream :

string filePath = @"c:\Users\exampleuser\Documents\userinputlog.txt";
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    // do stuff here...

    fs.Close();
}

Аналогично, MemoryStream используется, если резервным хранилищем является память:

// Read all bytes in from a file on the disk.
byte[] file = File.ReadAllBytes(“C:\\file.txt”);

// Create a memory stream from those bytes.
using (MemoryStream memory = new MemoryStream(file))
{
   // do stuff here...
}

Аналогично, System.Net.Sockets.NetworkStream используется для доступа к сети.

Все потоки выводятся из общего класса System.IO.Stream . Данные не могут быть непосредственно прочитаны или записаны из потоков. .NET Framework предоставляет вспомогательные классы, такие как StreamReader , StreamWriter , BinaryReader и BinaryWriter которые преобразуют между родными типами и интерфейсом потока низкого уровня и переносят данные в поток или из потока для вас.

Чтение и запись в потоки можно выполнять с помощью StreamReader и StreamWriter . Будьте осторожны, закрывая их. По умолчанию закрытие также закрывает поток, содержащийся в потоке, и делает его непригодным для дальнейшего использования. Это поведение по умолчанию может быть изменено с помощью конструктора, который имеет параметр bool leaveOpen и устанавливает его значение как true .

StreamWriter :

FileStream fs = new FileStream("sample.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
string NextLine = "This is the appended line.";
sw.Write(NextLine);
sw.Close();
//fs.Close(); There is no need to close fs. Closing sw will also close the stream it contains.

StreamReader :

using (var ms = new MemoryStream())
{
    StreamWriter sw = new StreamWriter(ms);
    sw.Write(123);
    //sw.Close();     This will close ms and when we try to use ms later it will cause an exception
    sw.Flush();     //You can send the remaining data to stream. Closing will do this automatically
    // We need to set the position to 0 in order to read 
    // from the beginning.
    ms.Position = 0;
    StreamReader sr = new StreamReader(ms);
    var myStr = sr.ReadToEnd();
    sr.Close();
    ms.Close();
}

Поскольку классы Stream , StreamReader , StreamWriter и т. Д. IDisposable интерфейс IDisposable , мы можем вызвать метод Dispose() для объектов этих классов.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow