JNI之类型介绍

NDK开发 91es.com站长2023年7月21日 am8:08发布11个月前更新
0
导航号,我的单页导航
目录

前言

之前对JNI基本的使用以及很熟悉了,但也是值得部分基础内容,这次就记录一下JNI中的基础类型,方便自己查阅。

正文

之前我们知道,JNI中是不认识java类型的(int好像认识,哈哈),比如我们之前的boolean在JNI是jboolean类型,之前涉及的类型不对,今天就深入了解一下其他类型。

基本类型

下面是本类型和本地等效类型

Java 类型     本地类型    说明

boolean     jboolean    无符号, 8 位
byte        jbyte       无符号, 8 位
char        jchar       无符号, 16 位
short       jshort      有符号, 16 位
int         jint        有符号, 32 位
long        jlong       有符号, 64 位
float       jfloat      32 位
double      jdouble     64 位
void        void        N/A

除了void一样,其他的都是在基础类型上加了前缀j,还是比较容易机记住的。

PS: JNI中用jint和int都是可以用的

当然,jni中为了方便,有些宏定义,比如

#define JNI_FALSE 0
#define JNI_TRUE 1

哈哈,跟C语音一样,非零即真。

typedef jint jsize;

jsize整数类型用于描述主要指数和大小 。

引用类型

JNI中有很多对应于java对象的引用类型。

下面是引用类型的组织层次结构。

jobject                  (所有java对象)
  jclass                (Class对象)
  jstring               (String对象)
  jarray                (数组)
    jobjectArray         (object数组)
    jbooleanArray        (boolean数组)
    jbyteArray           (byte数组)
    jshortArray          (short数组)
    jintArray            (int数组)
    jlongArray           (long数组)
    jfloatArray          (float数组)      
    jdoubleArray         (double数组)
  jthrowable              (Throwable对象)

值类型

jvalue联合类型在参数数组中用作单元类型 。

typedef union jvalue {
    jboolean z;
    jbyte b;
    jchar c;
    jshort s;
    jint i;
    jlong j;
    jfloat f;
    jdouble d;
    jobject l;
} jvalue

目前没怎么用,不太理解,略过。

类型签名

JNI使用Java虚拟机的类型签名表

类型签名    Java类型
Z           boolean
B           byte
C           char
S           short
I           int
J           long
F           float
D           double
L           fully-qualified-class ; 全限定的类
[           type type[]
(           arg-types ) ret-type 方法类型

举个例子

#java native_computer
public native int native_computer(String type, int a, int b);
#对应的类型签名
(Ljava/lang/String;II)I

# java  multiply
public static int multiply(int x, int y) {
    return x * y;
}
#对应的类型签名
(II)I

规则很简单,但偶尔可能转不过来,推荐使用javac和 javap进行转换。具体看《JNI静态注册》中的介绍。

参考文章

  1. JNI完全手册]》

版权声明 1、 本站名称 91易搜
2、 本站网址 https://www.91es.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权请留言
4、 本站禁止发布或转载任何违法的相关信息,如有发现请向站长举报
导航号,我的单页导航

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

暂无评论...