Метод MemoryStream.ToArray
Метод ToArray возвращает новый
byte[] длиной Length, а не
Capacity.
Лишний запас буфера в копию не попадает.
Внутренний массив без копии даёт
GetBuffer,
если доступ разрешён.
Синтаксис
byte[] copy = memoryStream.ToArray();
Пример
Давайте получим строку после записи трёх байт:
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
using (MemoryStream stream = new MemoryStream())
{
stream.Write(new byte[] { 97, 98, 99 }, 0, 3);
string res = Encoding.UTF8.GetString(stream.ToArray());
Console.WriteLine(res);
}
}
}
Результат выполнения кода:
"abc"
Пример
Давайте выведем байты числами:
using System;
using System.IO;
class Program
{
static void Main()
{
using (MemoryStream stream = new MemoryStream())
{
stream.Write(new byte[] { 97, 98, 99 }, 0, 3);
byte[] copy = stream.ToArray();
string res = copy[0] + " " + copy[1] + " " + copy[2];
Console.WriteLine(res);
}
}
}
Результат выполнения кода:
97 98 99
Пример
Давайте сравним длину копии с
Capacity:
using System;
using System.IO;
class Program
{
static void Main()
{
using (MemoryStream stream = new MemoryStream())
{
stream.Write(new byte[] { 97, 98, 99 }, 0, 3);
stream.Capacity = 16;
byte[] copy = stream.ToArray();
bool res = copy.Length == 3 && stream.Capacity >= 3;
Console.WriteLine(res);
}
}
}
Результат выполнения кода:
True
Смотрите также
-
GetBuffer,
внутренний массив -
MemoryStream,
класс потока -
Write,
запись передToArray -
Stream,
базовыйStream