Android JNI 学习(JNI 数据类型和数据结构)

著论准过秦,作赋拟子虚。这篇文章主要讲述Android JNI 学习:JNI 数据类型和数据结构相关的知识,希望能为你提供帮助。
本文我们来讨论一下JNI如何将java类型映射到本机C类型。
一、基本数据类型如下图表整理了Java基本类型和native对应的关系:

Java类型 Native类型 描述
boolean jboolean unsigned 8 bits
byte jbyte signed 8 bits
char jchar unsigned 16 bits
short jshort signed 16 bits
int jint signed 32 bits
long jlong signed 64 bits
float jfloat 32 bits
double jdouble 64 bits
void void N/A
 
 
 
 
 
 
 
 
 
 
【Android JNI 学习(JNI 数据类型和数据结构)】 
 
二、引用类型JNI 包含许多与不同类型的Java对象相对应的引用类型。JNI引用类型按层次结构组织,如图所示:
 
Android JNI 学习(JNI 数据类型和数据结构)

文章图片

在C中,所有其他JNI引用类型都定义为与jobject相同。例如:
typedef jobject jclass;

在C ++中,JNI引入了一组虚拟类来强制执行子类型关系。例如:
class _jobject {}; class _jclass : public _jobject {}; ... typedef _jobject *jobject; typedef _jclass *jclass;

三、字段和方法ID方法和字段ID是常规C指针类型:
struct _jfieldID; /* opaque structure */ typedef struct _jfieldID *jfieldID; /* field IDs */ struct _jmethodID; /* opaque structure */ typedef struct _jmethodID *jmethodID; /* method IDs */

四、类型签名JNI 使用Java VM的类型签名表示。下图显示了这些类型的签名:
类型签名 Java类型
Z boolean
B byte
C char
S short
I int
J long
F float
D double
L fully-qualified-class ; fully-qualified-class
[ type type[]
( arg-types ) ret-type method type
 
 
   
 
 
 
 
 
 
 
 
 
 
 
举个例子,Java方法:
long f (int n, String s, int[] arr);

对应的方法类型签名为:
(ILjava/lang/String; [I)J

 

    推荐阅读