/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Servers/Kestrel/shared/test/StreamExtensions.cs
95 строк
3 KB
Pranav K
Use file scoped namespaces (#38076)
06 ноя 2021, 03:52
Не верифицирован
06 ноя 2021, 03:52
a450cb6
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Threading; using System.Threading.Tasks; using Xunit; namespace System.IO; public static class StreamExtensions { /// <summary> /// Fill the buffer until the end of the stream. /// </summary> public static async Task<int> FillBufferUntilEndAsync(this Stream stream, byte[] buffer, CancellationToken cancellationToken = default) { var offset = 0; int read; do { read = await stream.ReadAsync(buffer, offset, buffer.Length - offset, cancellationToken); offset += read; } while (read != 0 && offset < buffer.Length); if (read != 0) { Assert.Equal(0, await stream.ReadAsync(new byte[1], 0, 1, cancellationToken)); } return offset; } public static async Task<int> FillEntireBufferAsync(this Stream stream, byte[] buffer, CancellationToken cancellationToken = default) { var offset = 0; int read; do { read = await stream.ReadAsync(buffer, offset, buffer.Length - offset, cancellationToken); offset += read; } while (read != 0 && offset < buffer.Length); Assert.True(offset >= buffer.Length); return offset; } public static async Task<byte[]> ReadAtLeastLengthAsync(this Stream stream, int length, int bufferLength = 1024, bool allowEmpty = false, CancellationToken cancellationToken = default) { var buffer = new byte[bufferLength]; var data = new List<byte>(); var offset = 0; while (offset < length) { var read = await stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken); offset += read; if (read == 0) { if (allowEmpty && offset == 0) { return null; } throw new Exception("Stream read 0."); } data.AddRange(buffer.AsMemory(0, read).ToArray()); } return data.ToArray(); } public static async Task<byte[]> ReadUntilEndAsync(this Stream stream, int bufferLength = 1024, CancellationToken cancellationToken = default) { var buffer = new byte[bufferLength]; var data = new List<byte>(); var offset = 0; while (true) { var read = await stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken); offset += read; if (read == 0) { return data.ToArray(); } data.AddRange(buffer.AsMemory(0, read).ToArray()); } } }