zoukankan      html  css  js  c++  java
  • 006android初级篇之jni数据类型映射

    JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)

    使用JNI的副作用

    一旦使用JNI,JAVA程序就丧失了JAVA平台的两个优点:

    1. 程序不再跨平台。要想跨平台,必须在不同的系统环境下重新编译本地语言部分。
    2. 程序不再是绝对安全的,本地代码的不当使用可能导致整个程序崩溃。一个通用规则是,你应该让本地方法集中在少数几个类当中。这样就降低了JAVA和C之间的耦合性。

    数据类型映射

    在Java存在两种数据类型:基本类型和引用类型(primitive types 和reference types)
    在JNI中也同样存在类似类型的映射

    基本类型映射表

    Java类型 本地C类型(NativeType) 实际表示的c类型 说明
    boolean jboolean unsigned char
    byte jbyte signed char
    char jchar unsigned char
    short jshort unsigned short
    int jint long 有符号,32 位
    long jlong __int64 有符号,64 位
    float jfloat float
    double jdouble double
    void void N/A

    引用类型映射表

    Java类型 本地C类型(NativeType) 说明
    Object jobject Class类对象
    String jstring 字符串对象
    Object[] jobjectArray 对象数组
    boolean[] jbooleanArray 布尔类型数组
    byte[] jbyteArray
    char[] jcharArray 字符型数组
    short[] jshortArray
    int[] jintArray
    long[] jlongArray 长整型数组
    float[] jfloatArray
    double[] jdoubleArray 双精度浮点型数组

    注意

    1. 基本类型在Native层可以直接引用
    2. 引用数据类型则不能直接使用,需要根据JNI函数进行相应的转换后,才能使用
    3. 多维数组(包括二维数组)都是引用类型,需要使用 jobjectArray 类型存取其值 ;

    描述符

    类描述符

    是类的完整名称(包名+类名),将原来的 . 分隔符换成 / 分隔符。
    如在java代码中的java.lang.String类的类描述符就是java/lang/String

    域描述符

    1. 基本类型的域描述符已经定义好

    Java语言类型 域描述符
    boolean Z
    byte B
    char C
    short S
    int I
    long J(?为什么不是L)
    float F
    double D

    2. 引用类型的描述符

    1. 一般引用类型则为 L + 该类型类描述符 + “;” 。

      例如:String类型的域描述符为 Ljava/lang/String;

    2. 对于数组,其为 : [ + 其类型的域描述符 + ;

      int[ ] 其描述符为[I

      float[ ] 其描述符为[F

      String[ ] 其描述符为[Ljava/lang/String;

      Object[ ]类型的域描述符为[Ljava/lang/Object;

    3. 多维数组则是 n个[ +该类型的域描述符 , N代表的是几维数组。例如:

      int [ ][ ] 其描述符为[[I

      float[ ][ ] 其描述符为[[F

    参考链接

    1. JNI学习积累之二 ---- 数据类型映射、域描述符说明
    2. Android的NDK开发(3)————JNI数据类型的详解
  • 相关阅读:
    设置导航条上的主题一颜色
    luogu_2158【题解】欧拉函数
    luogu_1313【题解】二项式定理
    【数论学习笔记】高斯消元
    luogu_2524【题解】康托展开
    luogu_1495【题解】中国剩余定理
    【数论学习笔记】 约数
    luogu_4430 luogu_4981【题解】 Cayley定理
    【数论学习笔记】质数
    【数论学习笔记】同余
  • 原文地址:https://www.cnblogs.com/fly-fish/p/4917438.html
Copyright © 2011-2022 走看看