2
Я хотел передать 2D-массив байтов из Java в C++ с помощью JNI, все кажется прекрасным, но я не могу получить значение третьего массива.Передача 2D bytearray на C Jni
Java:
byte[][] b = new byte[3][];
byte[] b1= new byte[]{0x1,0x2,0x3,0x4};
byte[] b2= new byte[]{0x5,0x6,0x7,0x8};
byte[] b3= new byte[]{0x9,0x9,0x9,0x9};
b[0]=b1;
b[1]=b2;
b[2]=b3;
sendData(b);
C++:
JNIEXPORT jbyteArray JNICALL Java_jni_JniExample_sendData___3_3B
(JNIEnv *env, jobject obj, jobjectArray data)
{
jboolean isCopy;
uint8_t** y = new uint8_t*[3];
for(int i=0;i<3;i++)
{
jbyteArray bytearray = (jbyteArray)env->GetObjectArrayElement(data, i);
y[i] = (uint8_t *)env->GetPrimitiveArrayCritical(bytearray, &isCopy);
cout << i << " " << y[i] << endl;
}
}
Вывод, который я получаю:
0 0x1 0x2 0x3 0x4
1 0x5 0x6 0x7 0x8
2
Я не могу достичь значения третьего массива. Я правильно использую GetPrimitiveArrayCritical?
Примечание: 'isCopy' является только FYI. Вы также можете передать 'NULL' вместо' & isCopy', так как вы все равно не используете его. –