java jni技术_JNI技术详解

这篇博客详细介绍了JNI(Java Native Interface)技术,包括它的作用、应用场景以及使用步骤。作者通过一个简单的示例展示了如何从编写Java代码、生成头文件、创建动态库到最终运行的过程。JNI主要在Java无法直接处理某些任务时,如调用本地系统API、整合不同语言系统或利用已有的C/C++库时发挥作用。博客还强调了没有JNI时可能面临的挑战和额外的开发成本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间探究了点关于JNI技术方面的东西,在网上找,发现关于这方面的东西很少

基本上也是找不到,所以就决定写下来,做个笔记:

JNI:

JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,

但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

我们知道Java是一种平台无关性的语言,平台对于上层的java代码来说是透明的,所以在多数时间我们是不需要JNI的

但在下面这几种情况下你可能会用到JNI技术:

1.你的Java代码,需要得到一个文件的属性。但是你找遍了JDK帮助文档也找不到相关的API。

2.在本地还有一个别的系统,不过他不是Java语言实现的,这个时候你的老板要求你把两套系统整合到一起。

3.你的Java代码中需要用到某种算法,不过算法是用C实现并封装在动态链接库文件(DLL)当中的。

对于上述的三种情况,如果没有JNI的话,那就会变得异常棘手了。就算找到解决方案了,也是费时费力。其实说到底还是会增加开发和维护的成本。

对于JNI来说:其具体步骤如下:

1.先对Java文件对应编译  javac filename.java

filename.java文件内容eg.

classHelloWorld

{

privatenativevoidprint();

static

{

System.loadLibrary("HelloWorld");

}

publicstaticvoidmain(String[] args)

{

newHelloWorld().print();

}

}

2.生成对应的.h文件 javah -jni filename此命令执行完后在目录中会生成HelloWorld.h文件,该文件中国包含了一个函数java_HelloWorld_print的声明。

3.将对应的.c或.cpp文件制作成动态库

cc -I/usr/lib/jvm/java-6-sun/include/linux  -I/usr/lib/jvm/java-6-sun/include -fPIC -shared -o libHelloWorld.so HelloWorld.c

4.执行

java -Djava.library.path='.' HelloWorld

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值