JNI - нативный метод с параметром ByteBuffer - PullRequest
17 голосов
/ 20 апреля 2010

У меня есть метод:

public native void doSomething(ByteBuffer in, ByteBuffer out);

Генерируемый javah C / C ++ заголовок этого метода:

JNIEXPORT void JNICALL Java__MyClass_doSomething (JNIEnv *, jobject, jobject, jobject, jint, jint);

Как я могу получить массив данных из jobject (это экземпляр ByteBuffer)?

1 Ответ

30 голосов
/ 20 апреля 2010

Предполагая, что вы выделили ByteBuffer с помощью ByteBuffer.allocateDirect (), вы можете использовать GetDirectBufferAddress

jbyte* bbuf_in;  jbyte* bbuf_out;

bbuf_in = (*env)->GetDirectBufferAddress(env, buf1);  
bbuf_out= (*env)->GetDirectBufferAddress(env, buf2); 
...