通过JNI获取Java ByteBuffer的指针

发布于 2024-12-13 23:08:45 字数 389 浏览 6 评论 0原文

如何获取指向 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++ 使用的内存。

How can I get a pointer to the inner array of a 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: I'm doing that to share the memory used by Java and C++.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别理我 2024-12-20 23:08:45
void * data = env->GetDirectBufferAddress(obj);

ByteBuffer 必须是直接的才能正常工作。

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

The ByteBuffer must be a direct one for this to work.

z祗昰~ 2024-12-20 23:08:45

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

return m_buffer;

..或者:

return &m_buffer [0]

If you're trying to return the address of the first element within m_buffer, then you can just do:

return m_buffer;

..or:

return &m_buffer[0]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文