JNI - нативный метод с параметром ByteBuffer

16

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

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

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

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

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

Теги:
jni
bytebuffer

1 ответ

25
Лучший ответ

Предполагая, что вы выделили ByteBuffer, используя ByteBuffer.allocateDirect() Использовать GetDirectByteBufferAddress

jbyte* bbuf_in;  jbyte* bbuf_out;

bbuf_in = (*env)->GetDirectBufferAddress(env, buf1);  
bbuf_out= (*env)->GetDirectBufferAddress(env, buf2); 
  • 1
    Возвращаемый тип GetDirectBufferAddress - void *, вам нужно привести его к jbyte *: bbuf_in = (jbyte *) (env *) -> GetDirectBufferAddress (env, buf1); // C bbuf_in = (jbyte *) env-> GetDirectBufferAddress (buf1); // C ++
  • 1
    @Error454 Error454 Это C, вам не нужно разыгрывать void* s
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню