ภาพรวม
เมธอด Buffer.BlockCopy() ใช้คัดลอก ช่วงไบต์ (byte range) จากอาร์เรย์ต้นทางไปยังอาร์เรย์ปลายทาง ทำงานระดับไบต์ (byte-level) ไม่ใช่ระดับองค์ประกอบ
รูปแบบการใช้งาน
byte[] src = { 22, 49 };
byte[] dst = new byte[5];
Buffer.BlockCopy(src, 0, dst, 0, 2); // คัดลอก 2 ไบต์จาก src[0] ไป dst[0]
ตัวอย่างโค้ดเต็ม
using System;
class Demo
{
static void Main()
{
byte[] b1 = new byte[] { 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();
}
}
ผลลัพธ์
2249000
ข้อสังเกตสำคัญ
- พารามิเตอร์ offset และ count เป็น จำนวนไบต์ ไม่ใช่จำนวนองค์ประกอบ
- สำหรับ
byte[]1 องค์ประกอบ = 1 ไบต์ จึงตรงกัน - สำหรับ
int[]1 องค์ประกอบ = 4 ไบต์ ต้องคูณ offset/count ด้วย 4 - เร็วกว่าการวนลูปคัดลอกทีละตัว
- ทำงานกับ primitive types ที่เก็บติดกันในหน่วยความจำ (arrays of value types)