通过JNI获取Java ByteBuffer的指针

时间:2011-11-03 19:12:51

标签: java c++ android-ndk java-native-interface bytebuffer

如何获得指向Java ByteBuffer内部数组的指针?

JNIEXPORT void JNICALL test(JNIEnv *env, jobject thiso) {
    jclass cls = env->FindClass("java/nio/ByteBuffer");
    jmethodID aloc = env->GetStaticMethodID(cls, "allocateDirect", "(I)Ljava/nio/ByteBuffer;");
    jobject obj = env->CallStaticObjectMethod(cls, aloc, 1000);
}

PS:我这样做是为了分享Java和C ++使用的内存。

2 个答案:

答案 0 :(得分:11)

void * data = env->GetDirectBufferAddress(obj);

ByteBuffer必须是一个直接的工作。

答案 1 :(得分:0)

如果您尝试在m_buffer内返回第一个元素的地址,那么您可以这样做:

return m_buffer;

..或:

return &m_buffer[0]