Класс MemoryStream
MemoryStream наследует
Stream.
Пустой конструктор создаёт растущий
буфер. Конструктор с byte[]
фиксирует размер: запись за предел
даёт NotSupportedException.
Байты забирают через
ToArray.
У методов есть асинхронные перегрузки.
Синтаксис
using System.IO;
using MemoryStream stream = new MemoryStream();
stream.Write(buffer, offset, count);
Пример
Давайте запишем "abcde"
в растущий поток:
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
using (MemoryStream stream = new MemoryStream())
{
byte[] data = Encoding.UTF8.GetBytes("abcde");
stream.Write(data, 0, data.Length);
string res = Encoding.UTF8.GetString(stream.ToArray());
Console.WriteLine(res);
}
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте запишем в готовый массив из пяти байт:
using System;
using System.IO;
class Program
{
static void Main()
{
byte[] store = new byte[5];
using (MemoryStream stream = new MemoryStream(store))
{
stream.Write(new byte[] { 97, 98, 99, 100, 101 }, 0, 5);
bool res = stream.Length == 5;
Console.WriteLine(res);
}
}
}
Результат выполнения кода:
True
Пример
Давайте попробуем записать больше, чем помещается в фиксированный буфер:
using System;
using System.IO;
class Program
{
static void Main()
{
using (MemoryStream stream = new MemoryStream(new byte[3]))
{
try
{
stream.Write(new byte[] { 1, 2, 3, 4 }, 0, 4);
}
catch (NotSupportedException)
{
Console.WriteLine("fail");
}
}
}
}
Результат выполнения кода:
"fail"
Смотрите также
-
ToArray,
скопировать байты -
Capacity,
размер буфера -
BufferedStream,
буфер поверх потока -
Read,
чтение из потока