• 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数据类型的详解
  • 相关阅读:
    Hadoop Mapreduce分区、分组、二次排序过程详解
    hadoop的NullWritable
    CentOS7.0修改主机名(hostname)
    Linux下不重启永久修改hostname
    稀缺——我们是如何陷入贫穷与忙碌的
    slf4j log4j logback关系详解和相关用法
    使用logstash+elasticsearch+kibana快速搭建日志平台
    安装XAMPP时出现 unable to realloc 83886080 bytes
    ElasticSearch查询max_result_window问题处理
    后台CMS日志处理记录
  • 原文地址:https://www.cnblogs.com/fly-fish/p/4917438.html
Copyright © 2020-2023  润新知