Giới thiệu
Buffer.BlockCopy sao chép một khối byte từ mảng nguồn sang mảng đích. Làm việc trên byte level, nhanh hơn copy từng phần tử. Namespace System.
Ví dụ cơ bản
byte[] b1 = { 22, 49 };
byte[] b2 = new byte[5];
Buffer.BlockCopy(b1, 0, b2, 0, 2); // Copy 2 byte từ b1[0] sang b2[0]
Ví dụ hoàn chỉnh
using System;
class Demo
{
static void Main()
{
byte[] b1 = { 22, 49 };
byte[] b2 = new byte[5];
Buffer.BlockCopy(b1, 0, b2, 0, 2);
bufferFunc(b2);
}
static void bufferFunc(byte[] a)
{
for (int j = 0; j < a.Length; j++)
Console.Write(a[j]);
Console.WriteLine();
}
}
Kết quả
2249000
Tham số BlockCopy
Buffer.BlockCopy(src, srcOffset, dst, dstOffset, byteCount);
src: Mảng nguồn (Array)srcOffset: Offset byte trong srcdst: Mảng đích (Array)dstOffset: Offset byte trong dstbyteCount: Số byte cần copy
Lưu ý quan trọng
- Làm việc trên byte, không phải phần tử. Với
int[], 1 int = 4 byte. - Mảng phải là kiểu primitive (bool, byte, char, short, int, long, float, double, ...).
- Offset tính bằng byte, không phải index phần tử.
- Không kiểm tra overflow kiểu dữ liệu - copy thô byte.
Ví dụ với int[] (cần tính byte offset)
int[] src = { 1, 2, 3 };
int[] dst = new int[5];
// Copy 2 int đầu = 8 byte
Buffer.BlockCopy(src, 0, dst, 0, 2 * sizeof(int));
// dst = { 1, 2, 0, 0, 0 }
So sánh với Array.Copy
| Đặc điểm | Buffer.BlockCopy | Array.Copy |
|---|---|---|
| Đơn vị | Byte | Phần tử |
| Kiểu mảng | Chỉ primitive | Bất kỳ Array |
| Ép kiểu | Không (copy thô) | Có (có boxing/unboxing) |
| Hiệu suất | Rất nhanh (memcpy) | Nhanh |