MemoryStream C#
Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье вы узнали про чтение и запись двоичных данных в C#. В данной статье я бы хотел поговорить про класс MemoryStream в C#. Данный класс представляет собой реализацию класса "Stream", в которой массив байтов используется для ввода и вывода. Класс "MemoryStream" является полезным, когда есть необходимость читать вводимые данные из массива или записывать выводимые данные в массив, а не вводить их непосредственно из устройства или выводить прямо на него. У данного класса имеется перегруженный конструктор.
Наиболее употребительный вариант:
MemoryStream(byte[] buffer)
"buffer" — это массив байтов, который является источником или приемником в запросах ввода (или вывода). Тонкий момент: следует иметь ввиду, что для хранения данных, которые будут передаваться в массив "buffer", — он должен быть достаточно большим.
Давайте на примере разберем, как работать с данным классом:
using System; using System.Text; using System.IO; namespace TestApplicationForStudy { class Program { static void Main(string[] args) { byte[] data = new byte[255]; // Создаём запоминающий поток MemoryStream mStream = new MemoryStream(data); // Создаём объекты чтения и записи данных в потоки // и передаём mStream в качестве параметра StreamReader sReader = new StreamReader(mStream); StreamWriter sWriter = new StreamWriter(mStream); // Записываем данные в память for (int i = 0; i < 10; i++) { sWriter.WriteLine("byte [" + i + "]: " + i); } // Записываем в память символ для того, чтобы в цикле // при достижении этого символа, выйти из цикла. // В противном случае мы пробежимся по всем 255 символам. sWriter.WriteLine("!"); // Данный метод нужен для того, чтобы содержимое буфера этого объекта // записалось непосредственно в массив data. // Если этого не сделать, то в массиве data ничего не будет. sWriter.Flush(); // Читаем данные прямо из массива data. Console.WriteLine("Данные из массива data:"); foreach (char ch in data) { if (ch == '!') break; Console.Write(ch); } // Читаем данные из потока с помощью StreamReader Console.WriteLine("Читаем данные из потока MemoryStream:"); // Ставим указатель файла в начала запоминающего потока MemoryStream. // Если этого не сделать, то вывод будет пустым. mStream.Seek(0, SeekOrigin.Begin); string str = ""; while ((str = sReader.ReadLine()) != null) { if (str == "!") break; Console.WriteLine(str); } Console.ReadLine(); } } }
Где можно применить запоминающие потока. Например, можно организовать сложный вывод с предварительным накоплением данных в массиве до тех пор, пока они не понадобятся. Также стандартный поток может быть переадресован из массива. Это может понадобиться в том случае, когда необходимо подавать тестовую информацию в программу.
В данной статье вы узнали про класс MemoryStream в C#.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.