概述
本文将讲解Java与原生代码之间的数据转换,包括基础类型之间的转换,以及数组的传递与转换。
类型转换表
JAVA基础类型与C++之间的对应表
Java类型 | C/C++类型 | 描述 |
---|---|---|
boolean | jboolean | 无符号8位整数 |
byte | jbyte | 有符号8位整数 |
char | jchar | 有符号16位整数 |
short | jshort | 有符号16位整数 |
int | jint | 有符号32位整数 |
long | jlong | 有符号64位整数 |
float | jfloat | 32位单精度浮点数 |
double | jdouble | 64位双精度浮点数 |
这一点可以从jni.h头文件中定义看到:
typedef unsigned char jboolean; /* unsigned 8 bits */
typedef signed char jbyte; /* signed 8 bits */
typedef unsigned short jchar; /* unsigned 16 bits */
typedef short jshort; /* signed 16 bits */
typedef int jint; /* signed 32 bits */
typedef long long jlong; /* signed 64 bits */
typedef float jfloat; /* 32-bit IEEE 754 */
typedef double jdouble; /* 64-bit IEEE 754 */
由上面的JNI定义代码可以看到,基础类型都是根据Java类型大小等价转换的。因此在使用Java传递过来的基础类型或者返回Java中的基础类型都可以直接使用。比如:
JNIEXPORT jint JNICALL
Java_com_example_wastrel_test_Test_BaseTypeTest(JNIEnv *env, jclass type,jint i) {
return i+5;
}
Java引用类型与C++之间的对应表
Java类型 | C/C++类型 | 描述 |
---|---|---|
Objec | jobject | 任何Java对象 |
Class | jclass | Class类对象 |
String | jstring | String类对象 |
Object[] | jobjectArray | 对象数组 |
boolean[] | jbooleanArray | 布尔数组 |
byte[] | jbyteArray | 字节数组 |
char[] | jcharArray | 字符型数组 |
short[] | jshortArray | 短整型数组 |
int[] | jintArray | 整型数组 |
long[] | jlongArray | 长整型数组 |
float[] | jfloatArray | 浮点型数组 |