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#.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.




