`
高级java工程师
  • 浏览: 405358 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JNI (JAVA Native Interface) 是 Java 与 C 的桥梁,有些时候要用到 JNI :

阅读更多
JNI (JAVA Native Interface) 是 Java 与 C 的桥梁,有些时候要用到 JNI :

•访问底层硬件
•提高代码运行效率
简单的整型数据传递

•首先添加环境变量:
◦jni.h  include=C:\Program Files\Java\jdk1.6.0_13\include
◦jni_md.h  include=C:\Program Files\Java\jdk1.6.0_13\include\win32
•用 eclipse 编写 Java 代码:D_int.java
Java代码
1.package com.ldq.d_int;  
2. 
3.public class D_int {  
4.    static {  
5.        System.loadLibrary("Factorial");  
6.    }  
7. 
8.    public native long getFactorial(int num);  
9. 
10.    public static void main(String[] args) {  
11.        D_int d = new D_int();  
12.        int num = 10;  
13.        System.out.println(num + "!=" + d.getFactorial(num));  
14.    }  
15. 
16.} 
package com.ldq.d_int;

public class D_int {
static {
System.loadLibrary("Factorial");
}

public native long getFactorial(int num);

public static void main(String[] args) {
D_int d = new D_int();
int num = 10;
System.out.println(num + "!=" + d.getFactorial(num));
}

}


•在 bin 目录下,生成头文件 com_ldq_d_int_D_int.h:javah -jni com.ldq.d_int.D_int
C代码
1./* DO NOT EDIT THIS FILE - it is machine generated */ 
2.#include <jni.h>  
3./* Header for class com_ldq_d_int_D_int */ 
4. 
5.#ifndef _Included_com_ldq_d_int_D_int  
6.#define _Included_com_ldq_d_int_D_int  
7.#ifdef __cplusplus  
8.extern "C" {  
9.#endif  
10./* 
11. * Class:     com_ldq_d_int_D_int 
12. * Method:    getFactorial 
13. * Signature: (I)J 
14. */ 
15.JNIEXPORT jlong JNICALL Java_com_ldq_d_1int_D_1int_getFactorial  
16.  (JNIEnv *, jobject, jint);  
17. 
18.#ifdef __cplusplus  
19.}  
20.#endif  
21.#endif 
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_ldq_d_int_D_int */

#ifndef _Included_com_ldq_d_int_D_int
#define _Included_com_ldq_d_int_D_int
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     com_ldq_d_int_D_int
* Method:    getFactorial
* Signature: (I)J
*/
JNIEXPORT jlong JNICALL Java_com_ldq_d_1int_D_1int_getFactorial
  (JNIEnv *, jobject, jint);

#ifdef __cplusplus
}
#endif
#endif

•在 bin 目录下新建 Factorial.cpp 文件,并根据上面函数定义,编写代码:
Cpp代码
1.#include "com_ldq_d_int_D_int.h"  
2. 
3.JNIEXPORT jlong JNICALL Java_com_ldq_d_1int_D_1int_getFactorial (JNIEnv *env, jobject obj, jint num)  
4.{  
5.    int f=1;  
6.    for(int i=1;i<num+1;i++)  
7.    {  
8.        f*=i;  
9.    }  
10.    return f;  
11.} 
分享到:
评论

相关推荐

    JNI(Java Native Interface)中文手册

    - **桥梁作用**:JNI充当Java与本地代码之间的桥梁,允许两种语言之间传递数据和调用方法。 - **扩展Java的功能**:通过JNI,开发者可以利用C/C++的特性来扩展Java的功能,例如实现图形界面的高性能渲染或访问硬件...

    JNI(java native interface) 简体中文+英文版

    JNI(java native interface) 简体中文:do.chuan@gmail.com 翻译版 英文版:Addison.Wesley.Java.Native Interface 希望对大家有帮助...

    JNI-Java Native Interface资料(精华)

    JNI充当了Java平台与主机环境之间的桥梁,使得Java应用程序能够调用本地库中的函数,这些库可能用C或C++编写。这种能力不仅提升了应用性能,尤其是在处理时间关键型代码时,还增强了应用的灵活性,使其能够访问Java...

    深入探索Java JNI:Java Native Interface的工作原理与应用

    Java Native Interface(JNI)是一个强大的机制,允许Java代码与本地代码(如C或C++)进行交互。JNI为Java应用程序提供了一种方式,可以访问由本地语言编写的库,实现性能关键型操作或访问特定平台的功能。本文将...

    Android JNI 知识简介(Java Native Interface )

    为了实现Java与C/C++之间的交互,需要通过JNI作为桥梁。 #### 三、加载 .so 文件 Android中的Java类可以通过`System.loadLibrary()`方法来请求虚拟机加载指定的C/C++组件(通常是`.so`动态链接库)。例如,在...

    Java本地接口(JNI)编程指南和规范 Java Native Interface 6.0 Specification

    JNI,全称Java Native Interface,是Java平台的一部分,用于建立Java应用和本地代码之间的桥梁。通过JNI,Java开发者可以编写本地方法,这些方法可以在Java虚拟机(JVM)内部调用,但实际由本地代码实现。这使得Java...

    Java Native Interface 6.0 Specification (JNI) 原创PDF书签

    JNI在Java的本地方法接口(Native Method Interface,NMI)基础上发展而来,最初随着Java开发工具包(JDK)1.0发布,后随着Java运行时接口(Java Runtime Interface)的集成,提供了更丰富的原生接口。 JDK1.0时,...

    JNI(java native interface)英文完全手册

    Java Native Interface(JNI)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。JNI在许多场景下都是至关重要的,比如访问操作系统特定的功能、使用C/C++库或者优化性能敏感的部分。本完全手册...

    The Java Native Interface jni

    Java Native Interface,通常简称为JNI,是Java编程语言中一个重要的特性,它允许Java代码和用其他语言(特别是C和C++)编写的本地应用程序接口(API)或本地库进行交互。JNI的主要用途在于,它可以调用那些用传统...

    JNI(Java Native Interface)_03

    4. **数据类型转换**:讲解如何在Java与C/C++之间传递数据,包括基本类型和对象的转换规则,如Java的引用如何转换为本地指针,以及数组和字符串的处理。 5. **回调机制**:JNI支持Java代码调用本地方法后,本地方法...

    The Java Native Interface Programmer's Guide.pdf

    JNI(Java Native Interface)是Java平台的一部分,它提供了一组API,用于实现Java代码与用其他编程语言(如C或C++)编写的本地代码之间的交互。通过JNI,开发者可以编写高性能的原生代码模块,并在Java应用程序中...

    JNI(Java Native Interface)_01

    总结,JNI是Java与本地代码交互的关键技术,通过JNI,Java开发者可以充分利用C/C++的高效性能和灵活性,实现Java无法直接完成的任务。理解并熟练掌握JNI,有助于提升Java应用的性能和扩展性。在实际开发中,要根据...

    Java Native Interface Specification R1.1

    Java Native Interface(JNI)是Java开发中的一个重要概念,它允许Java代码与其他语言编写的代码进行交互,尤其是与C或C++编写的本地应用程序接口(API)进行交互。JNI在Java应用程序中扮演着桥梁的角色,使得Java...

    The Java Native Interface Programmer's Guide and Specification

    《Java Native Interface程序员指南与规范》是一本深入探讨Java平台如何与本地代码交互的重要书籍。Java Native Interface(JNI)是Java平台的一个核心组件,它允许Java应用程序调用其他编程语言编写的函数,或者让...

    The Java Native Interface Programmer's Guide and Specification (带书签)

    -JNI的交互分为两种主要方式:Java调用本地方法(C call Java)和本地方法调用Java(Java call C)。 书中的内容提到了版权信息,指出这本书是由Sun Microsystems, Inc.版权所有,并且提到该公司拥有与本书描述的...

    java native interface(JNI)开发全攻略

    ### Java Native Interface (JNI) 开发全攻略 #### 引言 Java Native Interface(JNI)是一种强大的技术,允许Java代码...随着对JNI的深入了解,开发者可以将其应用于更复杂的项目中,实现Java与本地代码的无缝集成。

    JNI(Java Native Interface)_02

    JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。JNI在许多场景下都是至关重要的,比如优化性能敏感的部分、调用操作系统原生API、集成C/C++库或者实现与硬件...

    Java Native Interface

    JNI在很多场景下都是必不可少的,比如当需要调用操作系统底层功能、使用硬件设备或者提升性能时,由于Java虚拟机(JVM)的限制,无法直接实现,这时候就需要JNI作为桥梁。 JNI的核心是提供了一套接口,使得Java代码...

    android java native interface guide(jni指导 中文)

    - **语言互操作性**:重点讨论Java与C/C++之间的互操作性问题,包括垃圾回收(Garbage Collection, GC)和并发编程的挑战。 #### JNI简介 JNI是Sun Microsystems在1997年初发布的标准接口,被广泛应用于各种Java...

Global site tag (gtag.js) - Google Analytics