Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
792 of 1492 menu
◀ ▶

Метод 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

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить