`
itace
  • 浏览: 188967 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JNI左中括号[B[C[[C等

 
阅读更多



 

转:http://blog.csdn.net/qinjuning/article/details/7599796 

 

Java存在两种数据类型: 基本类型 和 引用类型  。

 

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

 

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

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

 

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

 

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

 

                

 

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

 

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

 

                        Java类型                      Native Type                                          描述

              

 

     注意   

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

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

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

                    

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

 

 

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

 

                    

 

  类描述符

 

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

           例如:在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、基本类型的描述符已经被定义好了,如下表所示:

 

                           

 

 

 

     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工具,就只能手动的

  进行类型转换了。

 

 

 

  • 大小: 29.2 KB
分享到:
评论

相关推荐

    关于 JSNI 调用 Java 方法时的 Type Signatures 说明

    在 Java Native Interface (JNI) 和 Google Web Toolkit (GWT) 中,Type Signatures 是一种特殊的表示法,用于描述 Java 类型。这种表示法在 JSNI(Java Script Native Interface)中尤为重要,因为它可以帮助开发者...

    【国开搜题】国家开放大学 一网一平台 Android网络开发技术03 期末考试押题试卷.docx

    JNI主要用于调用本地方法,即用C或C++等语言编写的函数。 - **答案:** A (Native) **5. 蓝牙通信协议不包括( )。** - **知识点解析:** 蓝牙通信协议主要分为核心协议层(Core Protocol Layer)、电缆替代协议层...

    安卓逆向入门笔记.pdf

    数组类型通过在基础类型前添加左中括号表示,如 int 数组为 [I,float 数组为 [F。对象类型以 L 开头,如 `Ljava/lang/String;` 表示 String 对象。 - **内部类表示**:内部类在 Smali 中通过在类名后添加 `$` 符号...

    Android Studio 使用快捷技巧

    4. **实现头文件方法**:在 jni 目录下新建一个 `Hello.c` 文件来实现 `.h` 文件中声明的方法。 5. **添加 NDK 路径**:确保正确配置了 NDK 的路径,并且要注意 NDK 版本与 Android SDK 版本之间的兼容性。 6. **...

    车库和车库 CFD 模型 CFD 分析可用于分析模型

    车库和车库 CFD 模型 CFD 分析可用于分析模型。

    henn-produktfolder-thermalmanagement-2024.pdf

    henn-produktfolder-thermalmanagement-2024

    39 Android源代码定时情景模式切换.zip

    39 Android源代码定时情景模式切换.zip

    基于单 神经 元PID控制器的四旋 翼 飞 行 器 航 迹控制.pdf

    基于单 神经 元PID控制器的四旋 翼 飞 行 器 航 迹控制.pdf

    西门子S7 200 Smart PLC与3台台达MS300变频器通讯程序

    内容概要:本文详细介绍了如何使用西门子S7-200 SMART PLC与三台台达MS300变频器进行Modbus RTU通讯的具体步骤和技术要点。首先,文章强调了正确的硬件连接方法,包括PLC与变频器之间的485总线连接以及终端电阻的设置。接着,深入讲解了变频器的关键参数配置,确保通讯稳定可靠。然后,展示了核心程序的设计思路,特别是轮询机制的应用,通过定时中断实现对三台变频器的状态监测和控制。此外,还提供了触摸屏的配置方法,使操作更加直观便捷。最后,分享了一些常见的调试经验和避坑指南,帮助解决实际应用中可能遇到的问题。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC与变频器通讯感兴趣的读者。 使用场景及目标:适用于需要将多台变频器集成到PLC控制系统中的工程项目,旨在提高系统的稳定性和可靠性,同时降低维护成本。 其他说明:文中提供的代码片段和配置建议均基于作者的实际经验,具有较高的实用价值。对于初学者来说,建议先理解基本概念再逐步深入实践。

    7天打造Rust命令行工具:Clap与StructOpt深度对比.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!

    互联网大厂裁员背后的经济规律与增长天花板.mp4

    互联网大厂裁员背后的经济规律与增长天花板.mp4

    2025年交换原理与技术.zip

    2025年交换原理与技术.zip

    基于PLC的智能农业温室大棚控制系统中电气控制设计与图纸详解 其中包括梯形图程序、接线图及io分配等内容,带您领略组态画面的精彩展示。

    内容概要:本文详细介绍了基于PLC(可编程逻辑控制器)的智能农业温室大棚控制系统的各个方面。主要内容涵盖IO分配、梯形图程序编写、接线图绘制和组态画面设计。通过合理的IO分配,PLC能够准确获取环境数据并控制相关设备;梯形图程序实现了对温度、湿度等环境因素的自动化控制;接线图确保了硬件连接的准确性;组态画面提供了用户友好的操作界面。此外,还分享了一些实际应用场景和技术细节,如温度控制梯形图实战、接线冷知识、组态画面设计技巧以及调试现场的经验。 适合人群:从事农业自动化、工业控制领域的工程师和技术人员,特别是对PLC编程和智能农业感兴趣的读者。 使用场景及目标:适用于希望提高农业生产效率和智能化水平的农场主和农业企业。通过引入PLC控制系统,可以实现对温室环境的精准控制,减少人工干预,提升作物产量和质量。 其他说明:文中不仅提供了理论知识,还包括了许多实践经验,帮助读者更好地理解和应用PLC技术于智能农业中。

    基于TypeScript+three.js 实现的三维地质模型剖切,以及剖面的补充+源码+项目文档(毕业设计&课程设计&项目开发)

    基于TypeScript+three.js 实现的三维地质模型剖切,以及剖面的补充+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于TypeScript+three.js 实现的三维地质模型剖切,以及剖面的补充+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于TypeScript+three.js 实现的三维地质模型剖切,以及剖面的补充+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于TypeScript+three.js 实现的三维地质模型剖切,以及剖面的补充+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于TypeScript+three.js 实现的三维地质模型剖切,以及剖面的补充+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档

    三菱MCGS组态皮带运输机控制系统:传送带四皮带及梯形图原理详解

    内容概要:本文详细介绍了基于三菱FX3U PLC和MCGS组态软件构建的四皮带运输机控制系统。首先阐述了系统的IO分配规则,强调了关键输入输出信号的选择依据及其重要性。接着深入解析了梯形图编程技巧,展示了如何通过定时器、比较器等指令实现皮带的顺序启动和速度同步控制。随后探讨了MCGS组态界面的设计,包括动态皮带模拟、报警提示以及历史数据记录等功能。最后分享了一些常见故障处理经验和系统优化方法,如合理的接线方式、滤波处理和联锁逻辑设计。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和组态软件有一定了解的人群。 使用场景及目标:适用于需要设计和维护复杂皮带传输系统的工厂环境,旨在提高生产效率并确保设备安全可靠运行。 其他说明:文中提供了大量实际案例和调试经验,有助于读者更好地理解和掌握相关技术和最佳实践。

    面板数据-中国各银行流动性创造(2012-2023年).xlsx

    详细介绍及样例数据:https://blog.csdn.net/T0620514/article/details/147722861

    Go语言设计模式:单例与工厂模式的并发安全实现.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 编译闪电般迅速,并发性能卓越,部署轻松简单!Go 语言以极简设计理念和出色工程性能,成为云原生时代的首选编程语言。从 Docker 到 Kubernetes,全球顶尖科技企业都在采用 Go。点击了解 Go 语言的核心优势、实战窍门和未来走向,开启高效编程的全新体验!

    基于NB-IoT的智能渔业养殖综合控制系统设计.pdf

    基于NB-IoT的智能渔业养殖综合控制系统设计.pdf

    基于MCGS与PLC技术的饮料灌装生产流水线智能控制解决方案:梯形图程序、接线图与组态画面全解析

    内容概要:本文详细介绍了利用MCGS通用监控系统和西门子S7-300 PLC实现饮料灌装生产流水线的自动化控制方法。首先阐述了IO分配的具体规则,明确各输入输出端口的功能及其所连接的外部设备;接着展示了梯形图程序的设计思路,解释了启动停止控制、传送带控制和灌装控制三个关键环节的工作流程;然后描述了接线图原理图的内容,说明了PLC与外部设备间的物理连接方式;最后讲解了MCGS组态画面的应用,强调了其在人机交互方面的作用。通过这些内容,全面揭示了如何构建一套稳定高效的饮料灌装生产系统。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程及MCGS组态有一定了解的专业人士。 使用场景及目标:适用于需要优化现有饮料灌装生产线的企业,旨在提高生产效率、降低人工成本的同时保证产品质量的一致性和稳定性。通过对文中介绍的技术手段的学习和应用,可以更好地理解和掌握现代工业自动化控制系统的构建方法。 其他说明:文中不仅提供了理论性的指导,还有具体的实例分析,如针对可能出现的问题提出解决方案,使得读者能够在实践中灵活运用所学知识。此外,还提到了一些调试经验和技巧,有助于解决实际工作中遇到的各种挑战。

    Go语言GUI开发:Fyne框架跨平台应用实战.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 编译闪电般迅速,并发性能卓越,部署轻松简单!Go 语言以极简设计理念和出色工程性能,成为云原生时代的首选编程语言。从 Docker 到 Kubernetes,全球顶尖科技企业都在采用 Go。点击了解 Go 语言的核心优势、实战窍门和未来走向,开启高效编程的全新体验!

Global site tag (gtag.js) - Google Analytics