JNI 概述 (翻译)
JNI 概述
Java本地接口(JNI)是JDK Java本地编程接口的一部分。通过使用JNI编程,可以保证你的代码在所有平台上完全可移植。
JNI允许在Java虚拟机中运行的Java代码使用其它语言写的库和应用,这些引用API可以让你的Java虚拟机嵌入到本地应用去。
在一些情况下,应用程序不能完全通过Java语言编写的时候,程序员可以使用JNI来编写本地方法。例如,你可能在下列情况下需要使用本地方法了JNI:
· Java标准类库可能不支持一些你的程序所需要的平台相关的特性。
· 你可能已经拥有了一个使用其它编程语言编写的程序库或者应用,而且你也想在Java应用中使用它。
· 你可能需要执行一小部分对实时性要求极高的低级程序语言,例如汇编,可以让你的Java应用调用函数。
你可以通过JNI框架编程使用本地方法做很多操作。本地方法可能是遗留下来的最好的应用,或者问题最好是使用Java以外的编程环境才能得到最好的解决。
JNI框架可以让你使用让你的本地方法使用Java对象,这就和Java代码使用这些对象是一样的。一个本地方法可以创建Java对象,包括数组合字符串,然后可以检查和使用这些对象来执行它的任务。本地方法同样可以检查和使用Java代码创建的对象。一个本地方法甚至能够更新Java对象,这些对象是它创建的或者是它过去创建的,这些更新过的对象在Java中也是可见的。因此,本地语言和Java语言两者都能够创建,更新和访问Java对象,它们能够共享这些对象。
本地方法同样能够很轻松的调用Java方法。常常你已经开发好了一个Java方法的库。
如果已经存在的Java方法已经包含了一些可以执行方法,那么在你的本地方法中就不需要“重新构建”。
JNI通过你的本地方法来使用Java编程语言的优势。特别的是,你可以捕获和抛出本地方法中的异常,并且在Java应用中处理这些异常。本地方法同样可以得到Java类的信息。通过调用特殊的JNI方法,本地方法能够加载Java类并且得到类信息。最终,本地方法可以使用JNI来进行运行期类型检查。
例如,下面的图片C程序是怎么通过JNI来连接Java库德,调用Java方法,使用Java类,等。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
下一个图片说明了从Java应用程序中调用本地语言函数。这个图显示了通过Java程序使用JNI的多种可能性,包括调用C例行程序,使用C++类,调用汇编例程,还有Z等。
可以很简单的把JNI看作是Java和本地应用程序的粘合剂。下面的图显示了JNI怎样把C程序和Java程序连绑定在一起。
转载于:https://www.cnblogs.com/BlueMagic/archive/2005/05/01/148574.html
JNI 概述 (翻译)相关推荐
- 计算机中scsi是什么翻译中文,SCSI命令概述(翻译)
<SCSI命令概述(翻译)>由会员分享,可在线阅读,更多相关<SCSI命令概述(翻译)(34页珍藏版)>请在人人文库网上搜索. 1.UNH 互操作性实验室,SCSI 命令概述, ...
- ASP.NET AJAX文档-ASP.NET AJAX 概述[翻译](1)
本文翻译自官方文档,小弟是第一次翻译,若有不妥之处,请大家指出. ASP.NET AJAX 概述 介绍 微软的ASP.NET AJAX能让你快速的创建web页面,这些页面包括一个能快速响应的富用户体验 ...
- C++函数概述 | 翻译密码
C++函数 函数很重要,在开发常见的做法是把一个大的程序划为为若干个程序模块,每个模块实现一部分功能,这样做不仅可以多人来完成,也可以在单个模块中找bug. 和C语言一样,C++也是只能有一个main ...
- ARMV8/ARMV9指令集概述(翻译)
快速链接: .
- 02_tensorflow2环境安装、CUDA 10.1 和CUDnn 7.6.5 版本安装、https://tensorflow.google.cn/overview中概述翻译
1.新手入门 1.1 安装tensorflow环境 1.安装了Anaconda,进入Anaconda Prompt: 关于安装Anaconda的博文参考:python安装.anaconda安装.pyc ...
- Qt Linguist翻译过程概述
Qt Linguist翻译过程概述 翻译过程概述 翻译过程概述 必须在应用程序中翻译的大多数文本由单个单词或简短短语组成.这些通常显示为窗口标题,菜单项,工具提示以及按钮,复选框和单选按钮的标签. 开 ...
- 关于JNI的几个问题
本文来说下JNI的几个问题 文章目录 JNI 概述 Java 代码和JNI代码通信 Java代码通过JNI接口 调用 C/C++方法 静态JNI方法和实例JNI方法的区别 java和JNI类型对照表 ...
- Android JNI原理分析
引言:分析Android源码6.0的过程,一定离不开Java与C/C++代码直接的来回跳转,那么就很有必要掌握JNI,这是链接Java层和Native层的桥梁,本文涉及相关源码: frameworks ...
- 【janio】janio 官网 翻译 Janino 是一个超小、超快的 Java 编译器
1.概述 翻译:http://janino-compiler.github.io/janino/#janino-as-a%20compiler Janino 是一个超小.超快的 Java 编译器. J ...
- 【Elasticsearch】所有可用 Qbox 插件的概述:第二部分
1.概述 翻译:https://qbox.io/blog/overview-of-all-available-qbox-plugins-part-ii 在文章的第二部分,我们将重点介绍提供各种第三方集 ...
最新文章
- 使用lisp函数控制cursor
- 中报亮眼,阅文的增长“飞轮”是如何练成的?
- mqtt js 中乱码_mqtt之上RRPC同步调用实战
- VTK:可视化之AssignCellColorsFromLUT
- matlab评价模型和预测模型
- location.href和window.open的几种用法和区别
- S3C2440 由ADS移植到 RealView MDK kile4
- 虚幻4游戏开发_4_导入fbx和编辑
- linux基础-- 桌面系统如何切换命令窗口
- Android 10 原生支持 5G!
- .NET Core基于Furion框架实现依赖注入
- 我对袁萌老先生的一些偏见
- python学习之 re库 正则表达式
- 论文笔记:《Object-Aware Guidance for Autonomous Scene Reconstruction》
- 2021laysns内核仿大婶娱乐网模板整站源码 非常漂亮 可做娱乐资源网 整站打包源码
- PySpark基础 —— SparkSQL
- Dubbo的四种负载均衡机制
- 2020年12月CFA一二三级考试重要时间点公布!
- Android.mk使用
- 洛谷递推与递归题单之南蛮图腾
热门文章
- Java操作MongoDB(聚合函数)向Mongo插入及查询数据
- SQL server 2005 数据库只能用计算机名连接不能用IP地址
- xtrabackup mysql 5.1_编译支持mysql-5.1.73版本的xtrabackup
- 赣州计算机教师招聘,江西省赣州市章贡区2019年招聘教师人员岗位表
- stn专线和otn有什么区别_专线网络和家庭宽带有什么区别?
- (day 46 - 小根堆 || 动态规划 ) 剑指 Offer 49. 丑数
- Java的继承和python的继承_Java ,python面向对象的继承及其区别
- python掷骰子_掷骰子童芯派 python硬件编程(上传模式)
- java clone方法_Java基础:Cloneable接口和Object的clone()方法
- php mysql过滤特殊字符_php特殊字符过滤,html标签处理