JNI:如何获得jbyteArray大小

Vik*_*yan 11 eclipse arrays size java-native-interface android

背景

我正在使用JNI中的字节数组.我不能得到jbyteArray.我正在Windows 7中的eclipse中编写代码.

Java代码:

private native int Enroll( byte[] pSeed );
Run Code Online (Sandbox Code Playgroud)

JNI代码:

在JNI我有有两个成员结构unsigned long lengthunsigned char data[1]

typedef struct blobData_s {
    unsigned long     length;
    unsigned char     data[1];
} blobData_t;
Run Code Online (Sandbox Code Playgroud)

现在,当我的JNI函数作为参数获取时,jbyteArray jpSeed我想得到jpSeed它的长度并将其设置为struct的length成员.

JNIEXPORT jint JNICALL Java_com_Test_Enroll( JNIEnv* env, jobject thiz, jbyteArray jpSeed ){
     blobData_t* bd = malloc( sizeof(blobData_t) );
     bd->length = **Question 1**
     bd->data[1] = jbyteArray;
}
Run Code Online (Sandbox Code Playgroud)

问题1:如何获得jpSeedJNI 的长度?

问题2:此代码是否正常bd.data[1] = jbyteArray;

Nay*_*rhc 28

  1. 你可以在这里使用GetArrayLength(JNIEnv* env, jbyteArray array) Read .

  2. 不知道你想做什么,我想你想的内容jpSeedbd.data[1].无论如何,访问字节数组的内容,应该完成GetByteArrayElements(...).