JNI 开发笔记 - 数据类型
2016-04-10 17:28
369 查看
JNI数据类型
JNI数据类型分为:基本数据类型、引用数据类型、Field and Method IDs。基本数据类型即布尔类型、整型、浮点类型、Void类型;引用类型有类、对象、字符串、数组等;Field and Method IDs比较特殊,它们用于在JNI中表示Java代码中的成员和方法的ID,通过JNI函数Get到这些ID后即可以通过另外的JNI函数操作对应的成员(Field)或者方法(Method)。JNI基本数据类型
Java Type | Native Type | Description |
---|---|---|
boolean | jboolean | unsigned 8bits |
byte | jbyte | unsigned 8bits |
char | jchar | signed 16bits |
short | jshort | signed 16bits |
int | jint | signed 32bits |
long | jlong | signed 64bits |
float | jfloat | 32bits |
double | jdouble | 64bits |
void | void | N/A |
JNI引用类型
Java Type | Native Type | Description |
---|---|---|
Object | jobject | Java对象 |
Class | jclass | 类 |
String | jstring | 字符串 |
xxxx | jxxxxArray | 数组 |
JNI引用类型的继承关系如下
Field and Method IDs
Field and Method IDs是基本的C指针类型:typedef struct _jfieldID * jfieldID; typedef struct _jmethodID * jmethodID;
jfieldID和jmthodID可用于获取类中的成员变量和成员函数的标识,然后通过标识来操作成员变量(读写)和成员函数(调用)。
这里展示一个基础的用法:
jint Java_com_goodix_jni_JNI_Foo(JNIEnv *env, jobject object) { jfieldID fid = (*env)->GetFieldID(env, object, "speed", "I") jint speed = (*env)->GetIntField(env, object, fid); speed++; (*env)->SetIntField(env, object, fid, speed); } jint Java_com_goodix_jni_JNI_Foo1(JNIEnv *env, jobject object) { jmethodID mid = (*env)->GetMethodID(env, object, "speedUp", "(I)Z"); jboolean ok = (*env)->CallBooleanMethod(env, object, mid, 767); }
JNI Type Signatures 类型签名
JNI类型签名在很多地方需要用到,例如使用RegisterNatives函数注册函数时、使用GetFiledID/GetMethodID时。类型签名是JNI数据类型在JVM中的唯一标识符,使用类型签名可以区分函数形参、返回值,确定变量类型。Type Signature | Java Type |
---|---|
Z | boolean |
B | byte |
C | char |
S | short |
I | int |
J | long |
F | float |
D | double |
Lclass | 完全限定类 |
[type | 数组类型type[] |
(arg-type)ret-type | 函数类型 |
相关文章推荐
- 队列
- 第一回认识try catch
- 【BestCoder Round #79 (div.2)】HDU5660jrMz and angles
- 对vb感受(下)
- 数列回顾
- 二叉树的递归和非递归遍历
- HDU 1021
- Android异步编程
- div中使图片垂直居中
- JavaWeb总结(二)—HttpServletResponse对象
- 在配置spring配置文件时报错,解决办法
- 50、内部类详解
- PHP基础(PHP的数据类型)
- 原码、反码、补码----详解
- 让开机更加简便
- 杭州电子科技大学(HDU)ACM 刷题-----------贪心算法之2021
- 广义表
- 树链剖分来一发
- C++实验3
- 我的C++第三次上机作业