JNI数据类型(转)

摘要:
Int、float、char和其他基本类型。2.参考类型——参考类型。我发现它可以被这种类型的域描述符直接替换。1.已定义基本类型的描述符。2.引用类型的描述符一般指类型L+类型类描述符+;String类型的域描述符是Ljava/lang/String,[+其类型的域描述符+。

  本文原创,转载请注明出处:http://blog.csdn.net/qinjuning

    在Java存在两种数据类型: 基本类型 和 引用类型 ,大家都懂的 。

    在JNI的世界里也存在类似的数据类型,与Java比较起来,其范围更具严格性,如下:

        1、primitive types ----基本数据类型,如:int、 float 、char等基本类型

        2、reference types----引用类型,如:类、实例、数组。

 

      特别需要注意:数组 ------ 不管是对象数组还是基本类型数组,都作为reference types存在。

 

     1、primitive types (基本数据类型)映射参见下表: 

                JNI数据类型(转)第1张

        这些基本数据类型都是可以在Native层直接使用的 。

 

      2、reference types (引用数据类型)映射参见下表

                        Java类型                      Native Type                                          描述

              JNI数据类型(转)第2张

     注意   

        1引用数据类型则不能直接使用,需要根据JNI函数进行相应的转换后,才能使用

        2、多维数组(包括二维数组)都是引用类型,需要使用 jobjectArray 类型存取其值 ;

                 例如:二维整型数组就是指向一位数组的数组,其声明使用方式如下:

                    

  1. //获得一维数组 的类引用,即jintArray类型  
  2.     jclass intArrayClass = env->FindClass("[I");   
  3.     //构造一个指向jintArray类一维数组的对象数组,该对象数组初始大小为dimion  
  4.     jobjectArray obejctIntArray  =  env->NewObjectArray(dimion ,intArrayClass , NULL);  
  5.     ...//具体操作  

   另外,关于引用类型的一个继承关系如下,我们可以对具有父子关系的类型进行转换:

                    JNI数据类型(转)第3张

  类描述符

    类描述符是类的完整名称(包名+类名),将原来的 . 分隔符换成 / 分隔符。

           例如:在java代码中的java.lang.String类的类描述符就是java/lang/String

       其实,在实践中,我发现可以直接用该类型的域描述符取代,也是可以成功的。

              例如:        jclass intArrCls = env->FindClass("java/lang/String")

                等同于      jclass intArrCls = env->FindClass("Ljava/lang/String;")

   数组类型的描述符则为,则为:  [ + 其类型的域描述符        (后文说明)

           例如:

                  int [ ]     其描述符为[I

                  float [ ]   其描述符为[F

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

 

  域描述符

 

      1、基本类型的描述符已经被定义好了,如下表所示:

                           JNI数据类型(转)第4张

 

 

     2、引用类型的描述符

         一般引用类型则为 L + 该类型类描述符 + ;   (注意,这儿的分号“;”只得是JNI的一部分,而不是我们汉语中的分段,下同)

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

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

                  int[ ]     其描述符为[I

                  float[ ]   其描述符为[F

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

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

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

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

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

 

  方法描述符

 

       将参数类型的域描述符按照申明顺序放入一对括号中后跟返回值类型的域描述符,规则如下: (参数的域描述符的叠加)返回

  类型描述符。对于,没有返回值的,用V(表示void型)表示。举例如下:

                 Java层方法                                               JNI函数签名

                String test ( )                                              Ljava/lang/String;

                int f (int i, Object object)                            (ILjava/lang/Object;)I

                void set (byte[ ] bytes)                                ([B)V

 

 

     在编程时,如果是利用javah工具的话,这些都不需要我们手动编写对应的类型转换,如果不能用javah工具,就只能手动的

  进行类型转换了。

    下一篇将会以一个具体的实站去具体掌握JNI。

  

    分析一个使用Android NDK 开发的系列博客,觉得挺不错的:

               《 Android的NDK开发(3)————JNI数据类型的详解》

免责声明:文章转载自《JNI数据类型(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Chrome开发者之测试应用win7为鼠标右键添加“用Photoshop编辑”选项下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

oracle学习第一天【简单操作】

1,连接数据库 C:\Documents and Settings\Administrator>sqlplus /nolog SQL*Plus: Release 10.1.0.2.0 - Production on 星期六 5月 14 11:14 Copyright (c) 1982, 2004, Oracle.  All rights reserve...

ionic + cordova+angularJs 搭建的H5 App完整版总结

   为期半个月的项目实践开发,已完整告一段落,团队小组获得第一名,辛苦总算没有白费,想起有一天晚上,整个小组的人,联调到12点才从公司回去,真是心酸。这里总结一下,项目过程中遇到的问题 和感悟。哈哈,放张集体照。嘿嘿,项目所有的不同的team的小伙伴,一群优秀的小伙伴(大多都来自高校211,985)么么哒.下面介绍下我们组的产品和问题。 项目已放在git...

Java实现bt文件下载、制作、解析、磁力链接

首先torrent里面肯定携带的有一些信息,所以就需要我们来解析这些信息。      我们这里做多文件制作torrent,所以首先要针对每一个文件建一个实体类 [java] view plain copy  import java.util.List;      public class Info {       private String na...

C# HMAC_SHA1加密

hmacsha1在很多签名计算中都很常用了,这里对两种可能返回的字符串类型做了分类 一种是直接返回字符串,一种是baset64后返回 需要看第三方对接文档中是否有特别说明,调试时如果报错,要比对串的内容看对方是否做了base64 #region HMACSHA1加密 将二进制数据直接转为字符串返回 /// <summary>...

element-ui 树形表格多选

如题element-ui 2.13.2版本支持树形结构tabel,多层级折叠显示 但是没有多选 + 树形tabel, 业务需求的情况下必须要实现,操作勾选数据编辑 这里我们可以用两个事件来实现:   @select:用户勾选某行触发事件,第一个参数selection:所有选中的数据, 第二参数row:勾选的这行数据)   @select-all : 表头的...

Mybatis-第N篇配置log4j1、log4j2打印执行的sql语句

1、log4j1配置    目录结构:       conf.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/myba...