Java层和Native层都有自己的数据类型,在JNI中,这些数据类型又可以分为基本数据类型和引用数据类型,其中,基本数据类型是可以直接相互转换的,而引用数据类型则需要进行一定的装换才可以。为了方便对两个世界的基本数据类型进行相互装换,JNI为我们提供了一系列的方法来帮助我们完成这些工作。
- JNI数据类型
- 1 基本数据类型
Java类型 JNI类型 类型签名
boolean jboolean Z
byte jbyte B
char jchar C
short jshort S
int jint I
long jlong J
float jfloat F
double jdouble D
void void V
1.2 引用类型
Java类型 JNI类型 类型签名
所有对象 jobject L+ classname + ;
Class jclass Ljava/lang/Class;
String jstring Ljava/lang/String;
Object[] jobjectArray [L + classname + ;
boolean[] jbooleanArray [Z
byte[] jbyteArray [B
char[] jcharArray [C
short[] jshortArray [S
int[] jintArray [I
long[] jlongArray [J
float[] jfloatArray [F
double[] jdoubleArray [D
Throwable jthrowable Ljava/lang/Throwable;
1.3 引用类型的继承关系
jobject
jclass (java.lang.Class objects)
jstring (java.lang.String objects)
jarray (arrays)
jobjectArray (object arrays)
jbooleanArray (boolean arrays)
jbyteArray (byte arrays)
jcharArray (char arrays)
jshortArray (short arrays)
jintArray (int arrays)
jlongArray (long arrays)
jfloatArray (float arrays)
jdoubleArray (double arrays)
jthrowable (java.lang.Throwable objects)
- 基本数据类型
JNI 中的基本类型和 Java 中的基本类型是直接相互转换的,实际上,JNI中的这些Java层的基本类型定义就只是对 C/C++ 中的基本类型用 typedef 重新定义了一个新的名字而已。
/* Primitive types that match up with Java equivalents. */
typedef uint8_t jboolean; /* unsigned 8 bits */
typedef int8_t jbyte; /* signed 8 bits */
typedef uint16_t jchar; /* unsigned 16 bits */
typedef int16_t jshort; /* signed 16 bits */
typedef int32_t jint; /* signed 32 bits */
typedef int64_t jlong; /* signed 64 bits */
typedef float jfloat; /* 32-bit IEEE 754 */
typedef double jdouble; /* 64-bit IEEE 754 */
- 引用数据类型
JNI 把 Java 中所有对象当作一个 C 指针传递到本地方法中,这个指针指向 JVM 中的内部数据结构,而内部的数据结构在内存中的存储方式是不可见得。只能从 JNIEnv 指针指向的函数表中选择合适的 JNI 函数来操作 JVM 中的数据结构。JNI为我们提供了一系列的JNI函数来进行引用数据类型的操作和处理。如字符串类型,可以通过JNI函数NewString来在C,C++中创建一个Java字符串。JNI中关于这些引用数据类型定义的源码如下。
#ifdef __cplusplus
/*
* Reference types, in C++
*/
class _jobject {
};
class _jclass : public _jobject {
};
class _jstring : public _jobject {
};
class _jarray : public _jobject {
};
class _jobjectArray : public _jarray {
};
class _jbooleanArray : public _jarray {

最低0.47元/天 解锁文章
796

被折叠的 条评论
为什么被折叠?



