使用JNI的Java和C ++之间的SharedBuffer

时间:2017-05-29 15:47:53

标签: java c++ macos java-native-interface buffer

我正在研究的是使用C ++从相机读取图像数据并使用JNI让Java读取这些图像数据,我正在使用Mac OSX。

我目前拥有的拦截器是,我还没有找到任何方法在Mac OSX上的两种语言之间创建共享内存。

我可以想象我会使用一些缓冲区这样做,是否有人能对这个问题提供一些提示和知识?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用ByteBuffer.allocateDirect创建本机可访问内存:

public static native void getCameraData(ByteBuffer bb);

...

ByteBuffer bb = ByteBuffer.allocateDirect(1024);
getCameraData(bb);
// use data

然后在C ++端,使用GetDirectBufferAddress来访问内存块:

JNIEXPORT void JNICALL Java_MyClass_getCameraData(JNIEnv *env, jclass, jobject bb) {
    void* data = env->GetDirectBufferAddress(bb);
}