Android JNI 学习:JNI 数据类型和数据结构

Posted 灰色飘零

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

 

 

 

 

 

 

 

 

 

 

 

二、引用类型

JNI 包含许多与不同类型的Java对象相对应的引用类型。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 

 

以上是关于Android JNI 学习:JNI 数据类型和数据结构的主要内容,如果未能解决你的问题,请参考以下文章

Android深入理解JNI类型转换方法签名和JNIEnv

Android中关于JNI 的学习在JNI层訪问Java端对象

Android中关于JNI 的学习在JNI层訪问Java端对象

超全Android JNI&NDK编程总结

Android JNI之数据类型

Android JNI编程——C语言的基本数据类型,输出函数,输入函数