【问题标题】:JNI - native method with ByteBuffer parameterJNI - 带有 ByteBuffer 参数的本机方法
【发布时间】:2011-02-10 01:23:07
【问题描述】:

我有一个方法:

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

这个方法的javah C/C++头生成的是:

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

如何从 jobject 获取数据数组(即 ByteBuffer 实例)?

【问题讨论】:

    标签: java c java-native-interface bytebuffer


    【解决方案1】:

    假设您使用 ByteBuffer.allocateDirect() 分配了 ByteBuffer 你可以使用GetDirectBufferAddress

    jbyte* bbuf_in;  jbyte* bbuf_out;
    
    bbuf_in = (*env)->GetDirectBufferAddress(env, buf1);  
    bbuf_out= (*env)->GetDirectBufferAddress(env, buf2); 
    

    【讨论】:

    • GetDirectBufferAddress 的返回类型为 void*,需要强制转换为 jbyte*: bbuf_in = (jbyte*)(env*)->GetDirectBufferAddress(env, buf1); //C bbuf_in = (jbyte*)env->GetDirectBufferAddress(buf1); //c++
    • @Error454 这是C,你不需要转换void*s
    • 如果你有 -Wpedantic,你确实需要投射
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    相关资源
    最近更新 更多