Bufferはプリミティブ型のコンテナオブジェクトの抽象クラスです。位置、容量、リミットというプロパティを持つ配列オブジェクトなため、C言語関数へのデータ受け渡しに適しています。
例えばJNIの基本関数には、java.nio.Bufferに参照されたメモリ領域の開始アドレスを読み込み、戻すGetDirectBufferAddress関数があります。
void* GetDirectBufferAddress(JNIEnv* env, jobject buf);
JNIでJavaからバイト型のデータを受け取るには、以下のようにします。
jbyte* mybuf = (jbyte*) (*env)->GetDirectBufferAddress(env, buf);
Bufferを継承したクラスには以下のような種類があります。
JOCLでは、C言語の配列・ポインタは、Bufferオブジェクトとして受け渡しをします。
データの取得メソッドとしては以下のようなものがあります。
またデータの値を設定する場合のメソッドもBufferの実装クラスで提供されています。
Copyright 2018-2019, by Masaki Komatsu