Метод ReadAtLeast
Stream.ReadAtLeast из .NET 7
возвращает число прочитанных байт. Если
данных меньше минимума и
throwOnEndOfStream равен true,
бросается EndOfStreamException.
Ровно столько байт без возврата числа
даёт
ReadExactly.
Есть ReadAtLeastAsync.
Синтаксис
int read = stream.ReadAtLeast(
buffer, minimumBytes,
throwOnEndOfStream: true);
Пример
Давайте прочитаем хотя бы три байта.
Буфер ровно на три, поэтому метод
вернёт 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[3];
int res = ms.ReadAtLeast(buf, 3);
Console.WriteLine(res);
}
}
Результат выполнения кода:
3
Пример
Давайте запросим минимум 3, но
дадим буфер на пять байт. MemoryStream
за один Read заполняет весь буфер,
поэтому счётчик больше минимума:
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];
int res = ms.ReadAtLeast(buf, 3);
Console.WriteLine(res);
}
}
Результат выполнения кода:
5
Пример
Давайте запросим минимум больше, чем байт
в потоке, с throwOnEndOfStream: true:
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.ReadAtLeast(buf, 5, true);
}
catch (EndOfStreamException)
{
Console.WriteLine("fail");
}
}
}
Результат выполнения кода:
"fail"
Смотрите также
-
метод
ReadExactly,
который требует ровно столько байт -
метод
Read,
который может вернуть меньшеcount -
свойство
Length,
которое показывает размер потока -
Stream,
класс, где объявленReadAtLeast