aspnetcore/test/Common/ByteArrayExtensions.cs

48 lines
1.3 KiB
C#

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Buffers;
using System.Collections.Generic;
namespace System
{
internal static class ByteArrayExtensions
{
public static ReadOnlyBytes ToChunkedReadOnlyBytes(this byte[] data, int chunkSize)
{
if (chunkSize == 0)
{
return new ReadOnlyBytes(data);
}
var chunks = new List<byte[]>();
for (var i = 0; i < data.Length; i += chunkSize)
{
var thisChunkSize = Math.Min(chunkSize, data.Length - i);
var chunk = new byte[thisChunkSize];
for (var j = 0; j < thisChunkSize; j++)
{
chunk[j] = data[i + j];
}
chunks.Add(chunk);
}
chunks.Reverse();
ReadOnlyBytes? bytes = null;
foreach (var chunk in chunks)
{
if (bytes == null)
{
bytes = new ReadOnlyBytes(chunk);
}
else
{
bytes = new ReadOnlyBytes(chunk, bytes);
}
}
return bytes.Value;
}
}
}