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数据类型的详解
  • 相关阅读:
    面向对象的七大设计原则
    06章 初始继承和多态
    面向太阳,不问春暖花开
    05章 体检套餐管理系统
    02章《深入C#数据类型》项目经理评分
    MongoDB快速入门(十二) -- 索引
    MongoDB快速入门(十一)- sort() 方法
    MongoDB快速入门(十)- Limit(),Skip() 方法
    MongoDB快速入门(九)- 投影
    MongoDB快速入门(八)- 删除文档
  • 原文地址:https://www.cnblogs.com/fly-fish/p/4917438.html
Copyright © 2011-2022 走看看