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 
  • 相关阅读:
    c/c++面试45-50之字符串
    c/c++面试39-44之内存动态分配
    使用spring配合Junit进行单元测试的总结
    使用springBoot进行快速开发
    配置项目使用weblogic的JNDI数据源
    转载-解决使用httpClient 4.3.x登陆 https时的证书报错问题
    SpringData JPA查询分页demo
    Lucene中的域选项
    代码片段,lucene基本操作(基于lucene4.10.2)
    配置maven使用nexus
  • 原文地址:https://www.cnblogs.com/renhui/p/9940548.html
Copyright © 2011-2022 走看看