Como acessar arrays dentro de um objeto com JNI?

Tutoriais JNI, por exemploisto um, cobre muito bem como acessar campos primitivos dentro de um objeto, bem como como acessar matrizes que são fornecidas como argumentos de função explícitos (ou seja, como subclasses dejarray). Mas como acessar matrizes Java (primitivas) que são camposdentro ajobject? Por exemplo, gostaria de operar na matriz de bytes do seguinte objeto Java:

class JavaClass {
  ...
  int i;
  byte[] a;
}

O programa principal poderia ser algo assim:

class Test {

  public static void main(String[] args) {
    JavaClass jc = new JavaClass();
    jc.a = new byte[100];
    ...
    process(jc);
  }

  public static native void process(JavaClass jc);
}

O lado C ++ correspondente seria então:

JNIEXPORT void JNICALL Java_Test_process(JNIEnv * env, jclass c, jobject jc) {

  jclass jcClass = env->GetObjectClass(jc);
  jfieldID iId = env->GetFieldID(jcClass, "i", "I");

  // This way we can get and set the "i" field. Let's double it:
  jint i = env->GetIntField(jc, iId);
  env->SetIntField(jc, iId, i * 2);

  // The jfieldID of the "a" field (byte array) can be got like this:
  jfieldID aId = env->GetFieldID(jcClass, "a", "[B");

  // But how do we operate on the array???
}

Eu estava pensando em usarGetByteArrayElements, mas quer umArrayType como seu argumento. Obviamente estou perdendo alguma coisa. Existe um caminho para isso?

questionAnswers(2)

yourAnswerToTheQuestion