Quick Tip — How to convert a Java jintArray to a C++ std::vector

Xavier Jouvenot
1 min readMay 8, 2020

--

Hello ! I’m Xavier Jouvenot and in this small post, I am going to explain how to convert a Java jintArray to a C++ std::vector.

Self promotion: You can find other articles on Android development on my website 😉

Solution

For the people who only want the solution, to quickly copy-paste it in there code, here it is 😉

extern "C" JNIEXPORT jstring JNICALL Java_com_example_project_class_method(JNIEnv *env, jobject /* this */, jintArray arr) {
jsize size = env->GetArrayLength( arr );
std::vector input( size );
env->GetIntArrayRegion( arr, jsize{0}, size, &input[0] );
}

Explanation

If you read this, it may be that you want to understand how the previous solution achieve the goal of transforming the jintArray into a std::vector<jint>, and this is what I am going to try to explain. 🙂

First of all, we get the jintArray size by using the JNIEnv method GetArrayLength, and store this information in a variable.

Then, with this information, we can create a std::vector with the right size.

And finally, we copy the elements in from the jintArray to the std::vector using the JNIEnv method GetIntArrayRegion, by giving it all the informations that it need : the jintArray, the index where to start the copy, the size of the array, and the location where to copy the array.

Thank you all for reading this article, And until my next article, have a splendid day 😉

Interesting links

Originally published at http://10xlearner.com on May 8, 2020.

--

--