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

Точное чтение ReadExactly в C#

Метод ReadExactly заполняет буфер целиком или завершается ошибкой - контракт «ровно N байт» без цикла.

Это удобно для заголовков фиксированной длины и бинарных полей, где неполное чтение ломает разбор.

Сравним обычный Read и точное чтение на одном буфере. Read возвращает число байтов, а ReadExactly заполняет буфер и бросает EndOfStreamException, только если данных не хватило. Здесь хватает: первый вызов возвращает 2, сумма двух первых байтов равна 48:

using System.IO; using MemoryStream stream = new(); stream.Write([0x10, 0x20, 0x30]); stream.Position = 0; byte[] head = new byte[2]; Console.WriteLine(stream.Read(head, 0, head.Length)); // выведет 2 stream.Position = 0; stream.ReadExactly(head); Console.WriteLine(head[0] + head[1]); // выведет 48

В потоке шесть байт; прочитайте ровно 4 байта заголовка и выведите пятый байт потока как число.

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