Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 버퍼(Buffer) 유형 이해하기: BlockCopy로 바이트 배열 복사하기

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는 배열 간 원시 바이트를 고속으로 복사해야 할 때 유용하며, 이미지 처리, 네트워크 통신, 파일 입출력 등 성능이 중요한 작업에서 널리 사용됩니다.