C#のBufferクラスとは?BlockCopyメソッドでバイト配列をコピーする方法
C#で連続したバイトデータ(バイト列)を扱う際には、Bufferクラスを利用します。Bufferクラスが提供するBuffer.BlockCopyメソッドを使えば、あるバイト配列から別のバイト配列へ、高速かつ安全にバイト単位でデータをコピーすることができます。
Buffer.BlockCopyメソッドの基本構文
BlockCopyメソッドは以下の引数を受け取ります。
- src:コピー元のバイト配列
- srcOffset:コピー元の開始位置(バイト単位)
- dst:コピー先のバイト配列
- dstOffset:コピー先の書き込み開始位置(バイト単位)
- count:コピーするバイト数
サンプルコード
using System;
class Demo {
static void Main() {
// バイト配列を定義
byte[] b1 = new byte[] {39, 45, 58 };
byte[] b2 = new byte[5];
// b1からb2へ3バイト分をコピー
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
コードの解説
この例では、まず3つの要素 {39, 45, 58} を持つバイト配列 b1 と、5つの要素分の領域を確保したバイト配列 b2 を用意しています。
次に Buffer.BlockCopy(b1, 0, b2, 0, 3) を呼び出すことで、b1 の先頭から3バイト分のデータが b2 の先頭へコピーされます。コピーされていない残りの要素は初期値の 0 のままです。
最後に bufferFunc メソッドで b2 の全要素を順番に出力すると、「39」「45」「58」「0」「0」が連結された「39455800」という実行結果が得られます。
まとめ
BufferクラスのBlockCopyメソッドは、プリミティブ型の配列間で生のバイトデータを直接コピーできるため、Array.Copyよりも低レベルで高速な処理が可能です。画像データやバイナリファイルなど、大量のバイトデータを扱う場面で特に有用な機能といえます。
-
C#のulong型とは?特徴と使い方、最大値・最小値の取得方法を解説
ulong型とは C#におけるulong型は、System.UInt64型のエイリアス(別名)です。符号なし64ビット整数型であり、負の値を扱うことはできませんが、0から18,446,744,073,709,551,615までの非常に大きな正の整数を表現できる点が特徴です。 ulong型の宣言方法 ulong型の変数は、次のように宣言して値を代入します。 ulong val = 7712059531; 最大値と最小値を取得する ulong.MaxValueプロパティで最大値を、ulong.MinValueプロパティで最小値をそれぞれ取得できます。 Console.WriteLine(ulo
-
C#のBuffer.BlockCopyメソッドとは?バイト配列を高速にコピーする方法を解説
C#のBuffer.BlockCopyメソッドは、あるバイト配列から別のバイト配列へ、指定した範囲のバイトデータを高速にコピーするためのメソッドです。プリミティブ型の配列に対して低レベルかつ効率的なコピーを行えるため、パフォーマンスが求められる場面でよく利用されます。 Buffer.BlockCopyの基本構文 Buffer.BlockCopy(コピー元配列, コピー元オフセット, コピー先配列, コピー先オフセット, コピーするバイト数); 各引数の意味は以下のとおりです。 src(コピー元配列):コピー元となるバイト配列 srcOffset(コピー元オフセット):コピー元配列の読み取り開