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

Метод ReadExactly

Stream.ReadExactly появился в .NET 7: метод не возвращает число прочитанных байт - либо буфер заполнен, либо брошен EndOfStreamException. С частичным чтением работает Read. Минимум без жёсткого размера - ReadAtLeast. Есть ReadExactlyAsync.

Синтаксис

stream.ReadExactly(buffer, offset, count);

Пример

Давайте прочитаем ровно три байта:

using System; using System.IO; class Program { static void Main() { using var ms = new MemoryStream(); ms.Write([1, 2, 3, 4, 5], 0, 5); ms.Position = 0; byte[] buf = new byte[3]; ms.ReadExactly(buf, 0, 3); int res = buf[2]; Console.WriteLine(res); } }

Результат выполнения кода:

3

Пример

Давайте прочитаем все пять байт подряд:

using System; using System.IO; class Program { static void Main() { using var ms = new MemoryStream(); ms.Write([1, 2, 3, 4, 5], 0, 5); ms.Position = 0; byte[] buf = new byte[5]; ms.ReadExactly(buf, 0, 5); int res = buf[4]; Console.WriteLine(res); } }

Результат выполнения кода:

5

Пример

Давайте запросим больше байт, чем есть, и поймаем нехватку:

using System; using System.IO; class Program { static void Main() { using var ms = new MemoryStream(); ms.Write([1, 2, 3], 0, 3); ms.Position = 0; byte[] buf = new byte[5]; try { ms.ReadExactly(buf, 0, 5); } catch (EndOfStreamException) { Console.WriteLine("fail"); } } }

Результат выполнения кода:

"fail"

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

  • метод ReadAtLeast,
    который читает хотя бы минимум
  • метод Read,
    который возвращает фактическое число байт
  • метод Seek,
    который ставит позицию перед чтением
  • Stream,
    класс, где объявлен ReadExactly
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить