zoukankan      html  css  js  c++  java
  • 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 
  • 相关阅读:
    42.OC中instancetype与id的区别
    41.App 框架的搭建思路以及代码的规范
    44、WebStrom下载和破解
    40、IOS自动打包-Python脚本
    39、字符串去除空格
    38、当前时间是否在开放时间内(也就是时间对比)
    37、自定义气泡
    36、NSTimer使用详解-开启、关闭、移除
    35、输入框(UITextField)密码明暗文切换
    34、iOS App图标和启动画面尺寸
  • 原文地址:https://www.cnblogs.com/renhui/p/9940548.html
Copyright © 2011-2022 走看看