JNI基础概念以及原理-2016.01.11

Java到C数据类型转换

1 基础类型

Java与Jni类型对应关系

image

2 String到char数组

image

具体使用方式

JNIEXPORT jstring JNICALL Java_com_zhoulee_jnidemon_JniDemo_UseJniDataType
  (JNIEnv *env, jobject obj, jstring prompt)
{
    const jbyte *str = (*env)->GetStringUTFChars(env, prompt, NULL);
    if(str == NULL)
    {
        LOGE("GetStringUTFChars Failed");
        return NULL;
    }

    LOGD("jni prompt [%s]", str);

    (*env)->ReleaseStringUTFChars(env, prompt, str);

    char buf[] = "=============Jni OutPut================";

    jstring retStr = (*env)->NewStringUTF(env, buf);

    return retStr;
}

3 数组类型

image

整型数组Jni访问示例:

JNIEXPORT jint JNICALL Java_com_zhoulee_jnidemon_JniDemo_SumArray
  (JNIEnv *env, jobject obj, jintArray arry)
{
    jint* carr = (*env)->GetIntArrayElements(env, arry, NULL);
    if(NULL == carr)
    {
        return 0;
    }

    int len = (*env)->GetArrayLength(env, arry);
    LOGD("input array length [%d]", len);

    int sum = 0;
    int cnt = 0;
    for(; cnt < len; ++cnt)
    {
        sum += carr[cnt];
    }

    return sum;
}

参考资料

JAVA基础之理解JNI原理

JNI技术实践小结

JNI_百度百科

Java JNI实现原理初探

JNI学习积累之一 ---- 常用函数大全

原文地址:https://www.cnblogs.com/zhouLee/p/5121818.html