Метод MemoryStream.TryGetBuffer
Метод TryGetBuffer возвращает
false, если буфер скрыт, и
true с заполненным
ArraySegment<byte>, когда
массив доступен. При false
GetBuffer
не вызывают.
Синтаксис
bool ok = memoryStream.TryGetBuffer(out ArraySegment<byte> segment);
Пример
Давайте проверим поток на готовом массиве:
using System;
using System.IO;
class Program
{
static void Main()
{
using (MemoryStream stream = new MemoryStream(new byte[] { 97, 98, 99 }))
{
bool res = stream.TryGetBuffer(out _);
Console.WriteLine(res);
}
}
}
Результат выполнения кода:
False
Пример
Давайте запишем байты в пустой поток и запросим буфер:
using System;
using System.IO;
class Program
{
static void Main()
{
using (MemoryStream stream = new MemoryStream())
{
stream.Write(new byte[] { 97, 98, 99 }, 0, 3);
bool res = stream.TryGetBuffer(out ArraySegment<byte> seg);
Console.WriteLine(res && seg.Count >= 3);
}
}
}
Результат выполнения кода:
True
Пример
Давайте прочитаем первый байт из сегмента
без GetBuffer:
using System;
using System.IO;
class Program
{
static void Main()
{
using (MemoryStream stream = new MemoryStream())
{
stream.Write(new byte[] { 97, 98, 99 }, 0, 3);
if (stream.TryGetBuffer(out ArraySegment<byte> seg))
{
Console.WriteLine(seg.Array[seg.Offset]);
}
}
}
}
Результат выполнения кода:
97
Смотрите также
-
GetBuffer,
массив при успехе -
ToArray,
копия, если буфер закрыт -
MemoryStream,
типы конструкторов -
Stream,
базовый класс