`
gaojingsong
  • 浏览: 1182553 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【JNI技术介绍】

阅读更多

一、JNI 简介

JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少要保证本地代码能工作在任何Java 虚拟机环境下。

 

二、JNI的设计目的

标准的java类库可能不支持你的程序所需的特性。或许你已经有了一个用其他语言写成的库或程序,而你希望在java程序中使用它。

你可能需要用底层语言实现一个小型的时间敏感代码,比如汇编,然后在你的java程序中调用这些功能。

 

三、什么场合下应该使用JNI

当你开始着手准备一个使用JNI的项目时,请确认是否还有替代方案。像上一节所提到的,应用程序使用JNI会带来一些副作用。下面给出几个方案,可以避免使用JNI的时候,达到与本地代码进行交互的效果:

1、JAVA程序和本地程序使用TCP/IP或者IPC进行交互。

2、当用JAVA程序连接本地数据库时,使用JDBC提供的API。

3、JAVA程序可以使用分布式对象技术,如JAVA IDL API。

这些方案的共同点是,JAVA和C处于不同的线程,或者不同的机器上。这样,当本地程序崩溃时,不会影响到JAVA程序。

下面这些场合中,同一进程内JNI的使用无法避免:

1、程序当中用到了JAVA API不提供的特殊系统环境才会有的特征。而跨进程操作又不现实。

2、你可能想访问一些己有的本地库,但又不想付出跨进程调用时的代价,如效率,内存,数据传递方面。

3、JAVA程序当中的一部分代码对效率要求非常高,如算法计算,图形渲染等。

总之,只有当你必须在同一进程中调用本地代码时,再使用JNI。

 

由于Android大量使用了JNI技术,JNI将Java世界和Native世界紧密地联系在一起了。在Android平台上尽情使用Java开发的程序员们不要忘了,如果没有JNI的支持,我们将寸步难行!

 

四、JNI的副作用

一旦使用JNI,JAVA程序就丧失了JAVA平台的两个优点:

1、程序不再跨平台。要想跨平台,必须在不同的系统环境下重新编译本地语言部分。

2、程序不再是绝对安全的,本地代码的不当使用可能导致整个程序崩溃。一个通用规则是,你应该让本地方法集中在少数几个类当中。这样就降低了JAVA和C之间的耦合性。

 

五、开发步骤

1)编写带有native声明的方法的java类

2)使用javac命令编译所编写的java类

3)然后使用javah + java类名生成扩展名为h的头文件

4)使用C/C++实现本地方法

5)将C/C++编写的文件生成动态连接库

 

六、java和c是如何互通的

其实不能互通的原因主要是数据类型的问题,jni解决了这个问题,例如那个c文件中的jstring数据类型就是java传入的String对象,经过jni函数的转化就能成为c的char*。

0
3
分享到:
评论

相关推荐

    JNI技术介绍

    JNI 简单介绍,了解JNI技术,适合想了解JNI的开发者

    JNI技术各类文档

    JNI,全称Java Native Interface,是Java平台标准的一部分,它为...总的来说,JNI技术是Java开发者必备的技能之一,尤其在需要与本地代码交互或进行性能优化时。理解并熟练掌握JNI,能够极大地扩展Java应用程序的能力。

    JNI完全技术手册

    这个"JNI完全技术手册"显然是一份详尽的指南,涵盖了JNI的各个方面,包括基本概念、设置环境、调用本地方法、处理数据类型、异常处理等。下面将详细介绍这些知识点。 1. **JNI基础**:JNI是Java与本地代码交互的...

    JNI内容介绍JNI内容介绍

    对于想要提升Java应用程序功能和性能的开发者来说,理解和掌握JNI技术是非常有价值的。如果你有汇编、C/C++和Java的基础,那么学习JNI会更加得心应手。不过,无论你的背景如何,只要具备一定的编程基础,都可以通过...

    java的jni方式调用C++封装的库文件

    【JNI技术介绍】 JNI,全称为Java Native Interface,是Java平台提供的一种标准接口,用于让Java代码能够直接调用本地(非Java)代码,如C++、C等语言编写的库。通过JNI,开发者可以在Java应用程序中利用已有的C++...

    jni使用说明

    这篇英文文档《JNI技术介绍》详细阐述了如何在Java程序中使用JNI来调用C语言编写的代码。 JNI的核心概念包括以下几个部分: 1. **本地方法接口(Native Method Interface)**:这是Java虚拟机(JVM)提供的一组API...

    android_JNI介绍

    在Java与Dll交互的技术中,JNI是最直接和强大的一种方式。JNI提供了Java程序与系统原生方法的桥梁,而JAWIN和JACOB则是针对特定平台或技术的解决方案。JACOB主要针对Microsoft的COM组件,而JAWIN则用于与Win32-DLL...

    帮你快速上手JNI技术

    标题“帮你快速上手JNI技术”表明了本文档将指导读者如何快速学习并掌握JNI(Java Native Interface)技术。JNI是Java编程语言提供的一种标准编程接口,允许Java代码与其他语言写的代码进行交互,尤其是C和C++代码。...

    JNI技术培训

    从什么是JNI、为什么用JNI、怎么用JNI进行了系统的介绍,这是公司培训文档,希望对大家了解JNI有帮助

    JNI 调用实例(java JNI cpp互相调用实例)

    本文旨在介绍 Java 和 C++ 之间的互相调用实例,通过 JNI(Java Native Interface)技术,实现 Java 调用 C++ 和 C++ 调用 Java 的操作。下面将对标题、描述、标签和部分内容进行详细说明。 标题:JNI 调用实例...

    android jni详细介绍

    android jni详细介绍,包括如下文档: android_jni_javah_使用方法.doc android_jni操作指南.pdf Android技术之JNI和HAL.pdf Android通过JNI调用驱动程序(完全解析实例).doc 由浅入深,让你了解JNI如何在android里使用,...

    Android技术之JNI和HAL

    例如,Wi-Fi、3G网络、摄像头、重力感应器等功能模块都大量依赖于JNI技术。通过JNI,Java应用程序可以无缝地调用C/C++代码,实现对硬件的直接控制以及高效的数据处理。 #### JNI的编写和编译技术 JNI支持的Java...

    JNI技术手册PDF版本下载.txt

    JNI(Java Native Interface)技术是Java平台的...以上是对“JNI技术手册PDF版本下载”的详细介绍,希望对读者有所帮助。如果想进一步了解或获取更多关于JNI技术的手册资料,可以通过提供的链接下载PDF版本的学习资料。

    JNI编程技术,很难找到的

    本文将详细介绍JNI的相关知识点,包括其原理、使用场景以及具体的操作步骤。 #### 二、JNI的基础概念 - **JNI的作用**:JNI主要用于解决Java程序在执行效率上的局限性,尤其是在处理复杂算法或硬件操作时,通过...

    java的JNI本地方法介绍大全

    Java的JNI(Java Native Interface)本地方法是一种技术,允许Java代码与用其他编程语言(如C和C++)编写的本地代码进行交互。自从Java 1.1开始,JNI已经成为Java平台的一个重要组成部分,它的主要目标是保持平台的可...

Global site tag (gtag.js) - Google Analytics