MemoryStream C#

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#.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *