通过JNI获取Java ByteBuffer的指针

10

我该如何获取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);
}

备注:我这样做是为了共享Java和C++使用的内存。


2
你能澄清一下你的问题吗?如果你需要返回两个东西,那就返回一个结构体。 - Pubby
m_buffer 已经指向分配的内存了吗?如果是这样,为什么还要使用 new - Kerrek SB
经过一些研究,我进行了重写,现在它变得更简单了。 - Marcos Vasconcelos
2个回答

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

为了使这个工作起来,ByteBuffer 必须是直接的。


我认为Byte* data = env->GetDirectBufferAddress(obj);更具描述性。 - Patrick

0
如果您想返回 m_buffer 中第一个元素的地址,那么您可以这样做: return m_buffer; 或者: return &m_buffer[0]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接