Search code examples
carraysjava-native-interfaceset

Copying C Array into Java Array Using JNI


I have an array of unsigned integers in C and a java array of longs. I want to copy the contents of the unsigned integers to the java array. So far, the only function that I've found to do this is SetLongArrayRegion(), but this takes an entire buffer array. Is there a function to set only the individual elements of the java array?


Solution

  • There is also a function for the primitive 'long' type to set individual elements in JNI. So I believe what you want to have is something like this

    unsigned int* cIntegers = getFromSomewhere();
    int elements = sizeof(cIntegers) / sizeof(int);
    
    jfieldID jLongArrayId = env->GetFieldID(javaClass, "longArray", "[J");
    jlongArray jLongArray = (jlongArray) env->GetObjectField(javaObject, jLongArrayId);
    for (unsigned int i = 0; i < elements; ++i) {
       unsigned int cInteger = cIntegers[i];
       long cLong = doSomehowConvert(cInteger);
       env->SetLongArrayElement(jLongArray, i, (jlong) cLong);
    }
    

    if the long array in java is called longArray and the java class is saved in a JNI jclass variable javaClass.