Comment lire un objet bytearray dans JNI?

Est-il possible de faire référence à un ensemble de bytearray dans JNI, mais pas d'invoquer une copie ?

En natif le code en C, j'ai un bytearray passant de Java, et je veux juste comparer certaines données de ce bytearray donc je ne veux pas faire de copie de mémoire. Est-il possible ?

Je sais que je pourrais obtenir le pointeur de l'objet bytearray en natif en utilisant GetPrimitiveArrayCritical quelque chose comme ça

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;
}

Comme vous avez pu le voir, parce que je pourrait modifier les données dans la jbIn, je devrais utiliser GetPrimitiveArrayCritical pour obtenir son pointeur et de libérer plus tard.

Cependant, si je veux juste LIRE la bytearray jbBase, comment pourrais-je obtenir le pointeur de la jbBase mais de ne pas utiliser GetPrimitiveArrayCritical ?

Toute suggestion serait la bienvenue. Merci beaucoup.

OriginalL'auteur Bohan Lu | 2011-07-18