Java中的Native方法

2023-01-21 0 4,538

目录

以下是java中如何使用native方法基本语法

[ public / protected / private] native [return-type] methodName ();


上面的语法显示了如何在java中声明本机方法。与普通方法一样,它需要定义一个访问修饰符,后跟一个native关键字,后跟方法的返回类型,最后是方法名称,如果需要,还需要指定输入参数。

1.Native方法在Java中如何工作

它可以定义为那些用java以外的语言(如C/C++)实现的方法。使用这些方法背后的总体思路可能是利用C/C++中提供的高性能或内存管理。

为了支持用其他语言编写的方法,Java提供了一个称为Java Native Interface的接口,它充当Java和其他语言之间的中介。使用JNI的动机来自这样一个事实:它可以提供代码重用性和高性能。需要注意的是,用C/C++等其他语言编写的代码是不可移植的。

以下是Java本机native接口的主要组件:

  • javah:这是java开发工具包中提供的一个工具,它从包含native方法的现有java文件java类中创建与C兼容的头文件。
  • h:这是Java开发工具包中提供的基于C/C++的头文件,其功能是提供Java数据类型和native数据类型之间的映射。上面描述的Javah文件自动生成这个文件。

2.Java中Native方法的示例

现在我们将看到一个示例,它将清楚地了解native方法在java中的工作方式。以下是使用native方法所涉及的步骤:

  • 1. 编程java代码。
  • 2. 编译java代码。
  • 3. 创建一个C头文件。
  • 4. 在C/C++中实现native方法逻辑。
  • 5. 创建一个共享库。
  • 6. 运行并测试java应用程序。

下面的示例将分为两部分:具有java代码和具有native代码。

第1部分:Java

下面是包含native方法的java类。

代码:

class NativeDemo
{
public native String encryptData (String inputdata);
static
{
System.loadLibrary (\"nativedemo\");   /* lowercase of classname! */
}
public static void main (String[] args)
{
NativeDemo demo = new NativeDemo ();
System.out.println(\"Encrypted data is \" + demo.encryptData (\"This is javakk\"));
}
}


上面的示例包含在NativeDemo类中声明的native方法。encryptData方法的实现是用C编写的。如您所见,我们使用了一个静态块,其目的是加载encryptData方法实现可用的本机C库。需要注意的一件重要事情是系统中提供的字符串参数。loadLibrary方法是封闭java类的小写名称。现在,按照上面声明的步骤,是时候编译我们的java代码了。

下面的命令编译上述java代码。

javac NativeDemo


现在在下一步中,我们将使用javah实用程序创建一个头文件,如下所述。

javah -jni NativeDemo


上面的命令将生成一个与类名称同名的javah文件。在编写native方法的C实现时,将包含此文件。

第2部分:C代码

下面是native函数encryptData的C实现。

代码:

#include <jni.h>
#include <stdio.h>
#include \"NativeDemo.h\"
JNIEXPORT void JNICALL
Java_NativeDemo_encryptData(JNIEnv *env, jobject obj, jstring inputstr)
{
const char *str= (*env)->GetStringUTFChars(env,inputstr,0) // create string from jstring
char Newch = \'@\';
for(i = 0; i <= strlen(str); i++)
{
if(str[i] == \'a\' || str[i]== \'e\' || str[i]== \'i\' || str[i]== \'o\' || str[i]== \'u\' || str[i] == \'A\' || str[i]== \'E\' || str[i]== \'I\' || str[i]== \'O\' || str[i]== \'U\')
{
str[i] = Newch;
}
}
return env->NewStringUTF(str); // convert string to jstring
}


  • 以上文件与NativeDemo.c一起保存
  • 从上面的代码中,我们可以看到加密逻辑是用C语言编写的。这个逻辑只是基于将所有元音替换为@并返回字符串。
  • 编译上述C代码
  • 使用命令编译代码
  • 上面的命令创建了一个共享库,java编程层使用该库调用用C编写的代码。我们可以根据编译器和操作系统使用不同的编译策略。

完成上述步骤后,我们可以调用运行java代码,如下所示:

java NativeDemo


如果一切顺利,您将看到以下输出:

Encrypted data is th@s @s @d@bc@


3.总结

从上面的文章中,我们对它有了一个清晰的认识。大多数用java编写的实时应用程序都使用native本机方法来获取性能以及本机编程语言(如C/C++)中可用的内存管理优势。

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 Java中的Native方法 https://www.20zxx.cn/462958/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务