• 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 
  • 相关阅读:
    for,foreach,$.each()跳出循环的比较
    十大经典排序算法
    沙箱模式以及其使用到的IIFE
    绝对路径和相对路径的区别
    必备的JS调试技巧汇总
    通过.frm表结构和.ibd文件恢复数据
    Jenkins使用QQ邮箱构建邮件提醒服务
    windows常用命令积累
    7.手机屏幕分辨率
    6.移动端App安装包的测试用例
  • 原文地址:https://www.cnblogs.com/renhui/p/9940548.html
Copyright © 2020-2023  润新知