メインコンテンツまでスキップ
バージョン: v18

BLOB

  • BLOB (Binary Large OBjects) フィールド・変数・式とは、連続した可変長バイトであり、各バイトを個々にアドレス指定可能な 1つのまとまったオブジェクトとして取り扱うことができます。 サポートされている BLOB のサイズは空 (長さがNULL) から、最大 2,147,483,647 バイト (2GB) までです。

デフォルトで、4D は BLOB の最大サイズを 2GB に設定していますが、OS や空き容量によっては、この制限サイズが小さくなる場合があります。

  • BLOB は全体がメモリにロードされます。 BLOB 変数はメモリ内にだけ保持され、存在します。 BLOB フィールドは、レコードの他フィールドと同様に、ディスクからメモリにロードされます。
  • 大量のデータを保持できる他のフィールドタイプ (ピクチャーなど) と同様に、レコードを更新してもBLOBフィールドはメモリに複製されません。 したがって、Old および Modified コマンドをBLOBフィールドに適用しても、返される結果は意味を持ちません。

引数渡し、ポインター、および戻り値

4D の BLOB は、4D コマンドまたは 4D プラグインの引数として渡すことができます。 また、BLOB はユーザーメソッドのパラメーターに渡したり、関数の戻り値にすることもできます。

ポインターを使用して、BLOB をメソッドに渡すことも出来ます。その場合は BLOB へのポインターを定義し、そのポインターをパラメーターとして渡します。

例:

  // BLOB タイプの変数を定義します
C_BLOB(anyBlobVar)

// 4Dコマンドに引数として BLOB を渡します
SET BLOB SIZE(anyBlobVar;1024*1024)

// プラグインに BLOB を引数として渡します
$errCode:=Do Something With This BLOB(anyBlobVar)

// BLOB を引数として渡し、戻り値をBLOBで受け取ります
C_BLOB(retrieveBlob)
retrieveBlob:=Fill_Blob(anyBlobVar)

// BLOB のポインターをメソッドに渡します
COMPUTE BLOB(->anyBlobVar)

プラグイン開発にあたっての注意: BLOB 引数は “&O” (数字の0ではなく、アルファベットの"O") として宣言します。

代入

BLOB は相互に代入することができます。

例:

  // BLOB 型の変数を二つ宣言します
C_BLOB(vBlobA;vBlobB)
// 一つ目の BLOB に10K のサイズを割り当てます
SET BLOB SIZE(vBlobA;10*1024)
// 一つ目の BLOB を二つ目の BLOB に代入します
vBlobB:=vBlobA

ただし、BLOB に演算子を適用することはできません。

BLOB のアドレス指定

中カッコ {...} を使用し、BLOB の各バイトを個別にアドレス指定することができます。 BLOB 内では、各バイトに 0 から N-1 の番号が割り当てられています。N は BLOB のサイズです。 例:

  // BLOB を定義します
C_BLOB(vBlob)
// BLOB のサイズを 256バイトに設定します
SET BLOB SIZE(vBlob;256)
// 次のループは、BLOB の 256バイトをゼロに初期化します
For(vByte;0;BLOB size(vBlob)-1)
vBlob{vByte}:=0
End for

BLOB の各バイトはすべて個別にアドレス指定できるため、BLOB フィールドまたは変数には実際のところ何でも格納できます。