Метод MemoryStream.GetBuffer
Метод GetBuffer отдаёт тот же массив,
куда пишет поток. Его длина может быть
больше Length. Для безопасного
доступа сначала пробуют
TryGetBuffer.
У MemoryStream(byte[]) с закрытым
буфером бросается UnauthorizedAccessException;
нужен publiclyVisible: true.
Синтаксис
byte[] buf = memoryStream.GetBuffer();
Пример
Давайте проверим буфер растущего потока
после записи 97, 98, 99:
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[] buf = stream.GetBuffer();
bool res = buf.Length >= stream.Length
&& buf[0] == 97 && buf[1] == 98 && buf[2] == 99;
Console.WriteLine(res);
}
}
}
Результат выполнения кода:
True
Пример
Давайте вызовем GetBuffer
у потока на чужом массиве:
using System;
using System.IO;
class Program
{
static void Main()
{
using (MemoryStream stream = new MemoryStream(new byte[] { 97, 98, 99 }))
{
try
{
stream.GetBuffer();
}
catch (UnauthorizedAccessException)
{
Console.WriteLine("fail");
}
}
}
}
Результат выполнения кода:
"fail"
Пример
Давайте откроем буфер через
publiclyVisible: true:
using System;
using System.IO;
class Program
{
static void Main()
{
byte[] store = new byte[] { 97, 98, 99 };
using (MemoryStream stream = new MemoryStream(
store, 0, store.Length, writable: true, publiclyVisible: true))
{
byte[] buf = stream.GetBuffer();
bool res = buf[0] == 97 && buf[1] == 98 && buf[2] == 99;
Console.WriteLine(res);
}
}
}
Результат выполнения кода:
True
Смотрите также
-
TryGetBuffer,
проверка доступа -
ToArray,
копия без лишнего хвоста -
Capacity,
размер массива -
MemoryStream,
конструкторы потока