CreateFileMapping
(Windows) や(Unix)などを使用してメモリを共有している場合、shmget
必要なのは Java 側のネイティブ メソッドだけです。次に、次のように使用して、共有メモリに直接ByteBuffer
アクセスするを作成できます。NewDirectByteBuffer
JNIEXPORT jobject JNICALL Java_getSharedBuffer(JNIEnv* env, jobject caller) {
void* myBuffer;
int bufferLength;
次に、共有メモリへのポインタを取得する必要があります。Windows では、次のようなものを使用します。
bufferLength = 1024; // assuming your buffer is 1024 bytes big
HANDLE mem = OpenFileMapping(FILE_MAP_READ, // assuming you only want to read
false, "MyBuffer"); // assuming your file mapping is called "MyBuffer"
myBuffer = MapViewOfFile(mem, FILE_MAP_READ, 0, 0, 0);
// don't forget to do UnmapViewOfFile when you're finished
ByteBuffer
これで、この共有メモリに基づく を作成できます。
// put it into a ByteBuffer so the java code can use it
return env->NewDirectByteBuffer(myBuffer, bufferLength);
}