jni引用类型
与基本数据类型不同,引用类型对原生方法是不透明的,它们内部的数据结构并不直接向原生代码公开
Java类型 原生类型
java.lang.Class jclass
java.lang.Throwable jthorwable
java.lang.String jstring
Other objects jobjects
java.lang.Object[] jobjectArray
boolean[] jbooleanArray
byte[] jbooleanArray
char[] jcharArray
short[] jshortArray
int[] jintArray
long[] jlongArray
float[] jfloatArray
double[] jdoubleArray
Other arrays Jarray
jni中基础类型
基础类型是typedef 从c类型定义的
jni类型和c类型一致
基本数据类型可以直接与C/C++的相应基本数据类型映射,JNI用类型定义使得这种映射对开发人员透明
Java类型 JNI类型 C/C++类型 大小
Boolean Jblloean unsigned char 无符号8位
Byte Jbyte char 有符号8位
Char Jchar unsigned short 无符号16位
Short Jshort short 有符号16位
Int Jint int 有符号32位
Long Jlong long long 有符号64位
Float Jfloat float 32位
Double Jdouble double 64位
字符串
jboolean b = false;
const char* pop_char = env->GetStringUTFChars(pop_file, &b);
数组
1、一维数组 jdoubleArray xy
jdouble* para_data = env->GetDoubleArrayElements(para_array, NULL);
2、二维数组
参数类型 jobjectArray jobjarr
jint rows = env->GetArrayLength(jobjarr);
for (int i = 0; i < rows; i++)
{
jdoubleArray jniarray = (jdoubleArray)env->GetObjectArrayElement(jobjarr, i);
jdouble*coldata = env->GetDoubleArrayElements(jniarray, NULL);
data_x[i] = coldata[0];
data_y[i] = coldata[1];
data_z[i] = coldata[2];
env->ReleaseDoubleArrayElements(jniarray, coldata, 0);
}
3、返回一维数组 jdoubleArray
jdoubleArray newIntArray = env->NewDoubleArray(3);
jdouble fill[3];
for (int i = 0; i < 3; i++) {
fill[i] = result[i]; // put whatever logic you want to populate the values here.
}
//把jint指针中的元素设置到jintArray对象中
env->SetDoubleArrayRegion(newIntArray, 0, 3, fill);
4、返回二维数组 jobjectArray
jobjectArray returnjArr;
jclass doubleArr = env->FindClass("[D");
returnjArr = env->NewObjectArray(rows, doubleArr, NULL);
for (int i = 0; i < rows; i++)
{
jdoubleArray colArr = env->NewDoubleArray(3);
jdouble fill[3];
for (int j = 0; j < 3; j++) {
fill[j] = result[i][j];
}
env->SetDoubleArrayRegion(colArr, 0, 3, fill);
env->SetObjectArrayElement(returnjArr, i, colArr);
env->DeleteLocalRef(colArr);
}
- 1. Introduction
- 2. Design Overview
- 3. JNI Types and Data Structures
-
4. JNI Functions
- Interface Function Table
- Version Information
- Class Operations
- Exceptions
- Global and Local References
- Weak Global References
- Object Operations
- Accessing Fields of Objects
- Calling Instance Methods
- Accessing Static Fields
- Calling Static Methods
- String Operations
-
Array Operations
- GetArrayLength
- NewObjectArray
- GetObjectArrayElement
- SetObjectArrayElement
- New<PrimitiveType>Array Routines
- Get<PrimitiveType>ArrayElements Routines
- Release<PrimitiveType>ArrayElements Routines
- Get<PrimitiveType>ArrayRegion Routines
- Set<PrimitiveType>ArrayRegion Routines
- GetPrimitiveArrayCritical, ReleasePrimitiveArrayCritical
- Registering Native Methods
- Monitor Operations
- NIO Support
- Reflection Support
- Java VM Interface
- 5. The Invocation API