C#에서 바이트 데이터의 범위를 효율적으로 다루려면 Buffer 유형을 사용하는 것이 좋습니다. Buffer 클래스는 기본 형식(primitive type) 배열을 직접 조작할 수 있는 다양한 정적 메서드를 제공하며, 그중 Buffer.BlockCopy 메서드는 한 바이트 배열에서 다른 바이트 배열로 지정된 바이트 수만큼 빠르게 복사할 때 활용됩니다.
Buffer.BlockCopy의 매개변수
BlockCopy 메서드는 다음과 같은 인자를 받습니다.
- src: 복사할 원본 바이트 배열
- srcOffset: 원본 배열에서 복사를 시작할 위치(바이트 단위)
- dst: 복사 대상이 되는 바이트 배열
- dstOffset: 대상 배열에 쓰기를 시작할 위치(바이트 단위)
- count: 복사할 바이트 수
예제 코드
아래 예제에서는 두 개의 바이트 배열을 선언한 뒤, BlockCopy를 사용해 첫 번째 배열의 요소들을 두 번째 배열로 복사합니다.
using System;
class Demo {
static void Main() {
// 바이트 배열 선언
byte[] b1 = new byte[] { 39, 45, 58 };
byte[] b2 = new byte[5];
// 한 배열에서 다른 배열로 바이트 복사
Buffer.BlockCopy(b1, 0, b2, 0, 3);
// 복사된 요소가 담긴 배열 b2를 전달하여 출력
bufferFunc(b2);
}
static void bufferFunc(byte[] a) {
for (int j = 0; j < a.Length; j++) {
Console.Write(a[j]);
}
Console.WriteLine();
}
}실행 결과
39455800
결과 분석
b2 배열은 크기가 5로 선언되었지만, BlockCopy로 실제 복사된 값은 처음 3개뿐입니다. 따라서 나머지 두 요소는 기본값인 0으로 남아 있어 출력 결과가 39455800으로 표시됩니다. 즉, 복사된 39, 45, 58 뒤에 초기화되지 않은 0 두 개가 이어져 출력된 것입니다.
이처럼 Buffer.BlockCopy는 배열 간 원시 바이트를 고속으로 복사해야 할 때 유용하며, 이미지 처리, 네트워크 통신, 파일 입출력 등 성능이 중요한 작업에서 널리 사용됩니다.