C# 合并两个byte数组的几种方法
1. 使用 Array.Copy 方法(高效推荐)
byte[] array1 = { 1, 2, 3 };
byte[] array2 = { 4, 5, 6 };byte[] combined = new byte[array1.Length + array2.Length];
Array.Copy(array1, 0, combined, 0, array1.Length);
Array.Copy(array2, 0, combined, array1.Length, array2.Length);
2. 使用 Buffer.BlockCopy 方法(性能最优)
byte[] array1 = { 1, 2, 3 };
byte[] array2 = { 4, 5, 6 };byte[] combined = new byte[array1.Length + array2.Length];
Buffer.BlockCopy(array1, 0, combined, 0, array1.Length);
Buffer.BlockCopy(array2, 0, combined, array1.Length, array2.Length);
3. 使用 LINQ 的 Concat 方法(代码简洁)
using System.Linq;byte[] array1 = { 1, 2, 3 };
byte[] array2 = { 4, 5, 6 };byte[] combined = array1.Concat(array2).ToArray();
4. 使用 MemoryStream(适合连续合并多个数组)
using System.IO;byte[] array1 = { 1, 2, 3 };
byte[] array2 = { 4, 5, 6 };using (MemoryStream ms = new MemoryStream())
{ms.Write(array1, 0, array1.Length);ms.Write(array2, 0, array2.Length);byte[] combined = ms.ToArray();
}
5. 使用 Span<T>(.NET Core 2.1+ 高性能方案)
byte[] array1 = { 1, 2, 3 };
byte[] array2 = { 4, 5, 6 };byte[] combined = new byte[array1.Length + array2.Length];
array1.AsSpan().CopyTo(combined.AsSpan());
array2.AsSpan().CopyTo(combined.AsSpan(array1.Length));
性能比较
对于大数据量合并的性能排序(从高到低):
- Buffer.BlockCopy / Span<T>.CopyTo
- Array.Copy
- MemoryStream
- LINQ Concat
选择哪种方法取决于你的具体需求:
- 追求最高性能:使用 Buffer.BlockCopy 或 Span<T>
- 代码简洁优先:使用 LINQ
- 需要合并多个数组:使用 MemoryStream