小编Mus*_*mal的帖子

如何在JNI中读取bytearray?

是否可以在JNI中引用整个bytearray但不调用任何副本?

在本机C代码中,我有一个从Java传递的bytearray,我只是想将一些数据与这个bytearray进行比较,所以我不想做任何内存复制.可能吗 ?

我知道我可以通过使用GetPrimitiveArrayCritical来获取本地的bytearray指针

JNIEXPORT jbyteArray JNICALL Java_nfore_android_bt_pro_nfhfp_dsp
(JNIEnv *env, jobject jobj, jbyteArray jbIn, jbyteArray jbBase){

    jbyte *bufferIn;
    jbyte *bufferBase;
    bufferIn = (*env)->GetPrimitiveArrayCritical(env, jbIn, NULL);

    LOGD("Begin of dsp()"); 
    LOGD("In dsp() Before Comparing...");

        // Compare bufferIn with bufferBase here...

    LOGD("In dsp() After Comparing...");
    LOGD("End of dsp()");

    (*env)->ReleasePrimitiveArrayCritical(env, jbIn, bufferIn, 0);

    return jbIn;
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,因为我可能会更改jbIn中的数据,所以我应该使用GetPrimitiveArrayCritical获取其指针并稍后释放它.

但是,如果我只想读取bytearray jbBase,我怎么能得到jbBase的指针但不使用GetPrimitiveArrayCritical?

任何建议将不胜感激.非常感谢.

java-native-interface bytearray pass-by-reference

5
推荐指数
2
解决办法
1万
查看次数