`

Java中native方法——JNI

    博客分类:
  • Java
阅读更多

JNI(Java Native Interface)使Java拥有了和其他语言进行通信的能力。Java中声明为native的方法会被编译为本地代码,例如C/C++、Object C等待,以提高代码执行的效率。

  手工编译具有native类的方法如下:

  • 将需要调用JNI的方法声明为native方法。如
public final class Array {

    private Array() {}

    public static native int getLength(Object array);
 
    public static native Object get(Object array, int index);
}

 

  • 将.java源文件编译为.class文件。
  • 在此目录下,使用命令行 javah -jni Array 将.class文件编译为.h文件,例如:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Array */

#ifndef _Included_Array
#define _Included_Array
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Array
 * Method:    getLength
 * Signature: (Ljava/lang/Object;)I
 */
JNIEXPORT jint JNICALL Java_Array_getLength
  (JNIEnv *, jclass, jobject);

/*
 * Class:     Array
 * Method:    get
 * Signature: (Ljava/lang/Object;I)Ljava/lang/Object;
 */
JNIEXPORT jobject JNICALL Java_Array_get
  (JNIEnv *, jclass, jobject, jint);

#ifdef __cplusplus
}
#endif
#endif
  •  .h文件编译为.dll动态库文件。
  • java中可以使用System.loadLibrary方法对.dll加载。

参考:

http://en.wikipedia.org/wiki/Java_Native_Interface

http://www.ibm.com/developerworks/cn/java/j-jni/

分享到:
评论

相关推荐

    是男人就下100层——JNI代码

    通过在Java中定义native方法,然后使用`javah`工具生成对应的C/C++头文件,开发者可以在C/C++中实现这些方法,最后在Android.mk和Application.mk文件中配置编译规则,使编译系统能够生成.so动态链接库,供Java层加载...

    Java中JNI的使用(一)——native

    这篇博客文章“Java中JNI的使用(一)——native”很可能是对Java程序员如何首次接触和使用JNI的一个入门教程。 首先,我们来理解“native”关键字。在Java中,`native`是用来标记一个方法的,表示这个方法的实现是在...

    JAVA学习笔记————————

    9. **JNI(Java Native Interface)**:当JAVA代码需要调用本地(C/C++)代码时,JNI提供了桥梁,学习笔记会介绍如何使用JNI进行跨语言交互。 10. **JAVA标准库**:包括JDBC(数据库连接)、Swing(GUI开发)、JAXP...

    JNI开发——不同class类中的native本地方法的动态注册

    在传统的JNI开发中,我们通常在Java类中声明`native`方法,然后在对应的`.c`或`.cpp`文件中使用`JNIEXPORT`和`JNICALL`宏定义来实现这些方法。然而,当有大量类需要添加本地方法时,这种静态注册方式会变得繁琐且...

    Java通过调用C/C++实现的DLL动态库——JNI的方法

    - Java类中声明的native方法与C/C++的JNI函数相对应。 - 使用`javah` 工具生成头文件。 - C/C++项目中实现JNI方法并调用实际功能函数。 - 编译C/C++项目生成DLL动态库。 - 将DLL库放置于Java可访问的位置,运行Java...

    Android NDK——Hello JNI

    使用`javah`命令(在Android Studio中,可以通过右键点击`HelloJNI`类,选择`GenerateJNI`)生成JNI头文件`HelloJNI.h`,它定义了Java的native方法在C/C++中的原型。 4. **编写C/C++代码** 在`src/main/cpp`目录...

    Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

    - **内存管理**:在JNI中,需要手动管理内存,避免内存泄漏。使用`malloc()`和`free()`等函数进行分配和释放。 - **异常处理**:Java中的异常不能直接传递到C++,需要在JNI层进行捕获并处理。 - **线程安全**:...

    jni例子——使用int数组

    - Java中的数组在JNI中需要特殊处理。JNI提供了一种机制,可以将Java数组转换为本地数组,反之亦然。 - 对于`int`数组,我们可以使用`GetIntArrayElements()`函数获取Java数组的元素副本,`...

    Java JNI调用IC卡读卡器

    Java JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多情况下被用来调用本地库,比如C、C++编写的库,这在处理特定硬件设备或者高性能计算时非常有用。在...

    JNI编程(二) —— 让C++和Java相互调用(2)

    JNI提供了一套接口,这些接口定义了如何在Java虚拟机(JVM)中加载本地方法(即C/C++函数),以及如何与Java对象进行交互。在Java端,我们需要定义一个带有`native`关键字的方法,这告诉编译器这个方法将在本地代码...

    JNI调用及回调就(Java&C) 源码

    在回调函数中,字节流可能以`jbyteArray`的形式传递,这是JNI中用于表示Java字节数组的数据类型。回调函数需要将接收到的字节流转换为C的数据结构,例如`char*`,以便处理图像数据。 当回调函数执行完毕,它需要将...

    Android NDK开发——C回调Java中的方法

    NDK允许开发者在Android应用中混用Java和原生代码,通过JNI(Java Native Interface)来实现两者之间的交互。本篇文章将详细介绍如何在Android NDK开发中实现C回调Java中的方法。 首先,了解NDK和JNI的基础概念是...

    JNI学习示例代码,含java代码工程和win32 dll工程

    JNI,全称为Java Native Interface,即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++机型交互。即可以在Java代码中调用C/C++等语言的代码或者在C/C++代码中调用Java代码。由于JNI...

    JNI攻略之十一――启动虚拟机调用java类

    标题与描述均指向了一个具体的技术主题——通过JNI(Java Native Interface)在C语言环境中启动Java虚拟机并调用Java类。这一技术应用广泛,尤其是在需要跨语言编程或利用Java的特性(如垃圾回收、多线程)而底层...

    JNI编程指南书

    - **角色**:JNI作为Java与本地代码之间的桥梁,允许Java程序调用C/C++编写的本地方法,同时也支持将JVM嵌入到C/C++应用程序中。 - **副作用**:使用JNI会使Java程序失去跨平台性和安全性。因此,应谨慎使用本地...

    JNI的两个头文件jni.h和jni_md.h

    1. **编写本地方法**:在Java类中声明native方法,并使用`native`关键字。 2. **生成JNI头文件**:使用`javah`工具,根据Java源代码生成对应的C/C++头文件,这个文件会包含`jni.h`中的函数声明,方便本地代码实现。 ...

    基于JNI的Java串口通信系统的设计与实现——以Windows平台为例.zip

    1. **创建JNI接口**:定义Java类并声明native方法,这些方法将在C++中实现,用于串口的打开、关闭、读写等操作。 2. **生成JNI头文件**:使用javah工具从Java源代码生成包含JNI函数原型的头文件。 3. **编写C++...

Global site tag (gtag.js) - Google Analytics