欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的Native方法

 更新時(shí)間:2021年12月22日 17:20:43   作者:老K的Java博客  
這篇文章主要介紹了Java中的Native方法,在本文中,我們將看到j(luò)ava中本機(jī)native方法的介紹。我們將看到它的基本語法及其工作原理。將有java代碼示例展示native本機(jī)方法的使用,下面來看看文章的具體介紹

以下是java中如何使用native方法的基本語法:

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


上面的語法顯示了如何在java中聲明本機(jī)方法。與普通方法一樣,它需要定義一個(gè)訪問修飾符,后跟一個(gè)native關(guān)鍵字,后跟方法的返回類型,最后是方法名稱,如果需要,還需要指定輸入?yún)?shù)。

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

它可以定義為那些用java以外的語言(如C/C++)實(shí)現(xiàn)的方法。使用這些方法背后的總體思路可能是利用C/C++中提供的高性能或內(nèi)存管理。

為了支持用其他語言編寫的方法,Java提供了一個(gè)稱為Java Native Interface的接口,它充當(dāng)Java和其他語言之間的中介。使用JNI的動(dòng)機(jī)來自這樣一個(gè)事實(shí):它可以提供代碼重用性和高性能。需要注意的是,用C/C++等其他語言編寫的代碼是不可移植的。

以下是Java本機(jī)native接口的主要組件:

  • javah:這是java開發(fā)工具包中提供的一個(gè)工具,它從包含native方法的現(xiàn)有java文件java類中創(chuàng)建與C兼容的頭文件。
  • h:這是Java開發(fā)工具包中提供的基于C/C++的頭文件,其功能是提供Java數(shù)據(jù)類型和native數(shù)據(jù)類型之間的映射。上面描述的Javah文件自動(dòng)生成這個(gè)文件。

2.Java中Native方法的示例

現(xiàn)在我們將看到一個(gè)示例,它將清楚地了解native方法在java中的工作方式。以下是使用native方法所涉及的步驟:

  • 1. 編程java代碼。
  • 2. 編譯java代碼。
  • 3. 創(chuàng)建一個(gè)C頭文件。
  • 4. 在C/C++中實(shí)現(xiàn)native方法邏輯。
  • 5. 創(chuàng)建一個(gè)共享庫。
  • 6. 運(yùn)行并測(cè)試java應(yīng)用程序。

下面的示例將分為兩部分:具有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方法的實(shí)現(xiàn)是用C編寫的。如您所見,我們使用了一個(gè)靜態(tài)塊,其目的是加載encryptData方法實(shí)現(xiàn)可用的本機(jī)C庫。需要注意的一件重要事情是系統(tǒng)中提供的字符串參數(shù)。loadLibrary方法是封閉java類的小寫名稱?,F(xiàn)在,按照上面聲明的步驟,是時(shí)候編譯我們的java代碼了。

下面的命令編譯上述java代碼。

javac NativeDemo


現(xiàn)在在下一步中,我們將使用javah實(shí)用程序創(chuàng)建一個(gè)頭文件,如下所述。

javah -jni NativeDemo


上面的命令將生成一個(gè)與類名稱同名的javah文件。在編寫native方法的C實(shí)現(xiàn)時(shí),將包含此文件。

第2部分:C代碼

下面是native函數(shù)encryptData的C實(shí)現(xiàn)。

代碼:

#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語言編寫的。這個(gè)邏輯只是基于將所有元音替換為@并返回字符串。
  • 編譯上述C代碼
  • 使用命令編譯代碼
  • 上面的命令創(chuàng)建了一個(gè)共享庫,java編程層使用該庫調(diào)用用C編寫的代碼。我們可以根據(jù)編譯器和操作系統(tǒng)使用不同的編譯策略。

完成上述步驟后,我們可以調(diào)用運(yùn)行java代碼,如下所示:

java NativeDemo


如果一切順利,您將看到以下輸出:

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


3.總結(jié)

從上面的文章中,我們對(duì)它有了一個(gè)清晰的認(rèn)識(shí)。大多數(shù)用java編寫的實(shí)時(shí)應(yīng)用程序都使用native本機(jī)方法來獲取性能以及本機(jī)編程語言(如C/C++)中可用的內(nèi)存管理優(yōu)勢(shì)。

到此這篇關(guān)于Java中的Native方法的文章就介紹到這了,更多相關(guān)Java Native方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Java變量的聲明、內(nèi)存分配及初始化詳解

    關(guān)于Java變量的聲明、內(nèi)存分配及初始化詳解

    下面小編就為大家?guī)硪黄P(guān)于Java變量的聲明、內(nèi)存分配及初始化詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • SpringBoot編譯target目錄下沒有resource下的文件踩坑記錄

    SpringBoot編譯target目錄下沒有resource下的文件踩坑記錄

    這篇文章主要介紹了SpringBoot編譯target目錄下沒有resource下的文件踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 解決IntelliJ IDEA中鼠標(biāo)拖動(dòng)選擇為矩形區(qū)域問題

    解決IntelliJ IDEA中鼠標(biāo)拖動(dòng)選擇為矩形區(qū)域問題

    這篇文章主要介紹了解決IntelliJ IDEA中鼠標(biāo)拖動(dòng)選擇為矩形區(qū)域問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Calcite使用SQL實(shí)現(xiàn)查詢excel內(nèi)容

    Calcite使用SQL實(shí)現(xiàn)查詢excel內(nèi)容

    因?yàn)閏alcite本身沒有excel的適配器,?所以本文將模仿calcite-file,?搞一個(gè)calcite-file-excel實(shí)現(xiàn)查詢excel內(nèi)容,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • Redis使用RedisTemplate模板類的常用操作方式

    Redis使用RedisTemplate模板類的常用操作方式

    這篇文章主要介紹了Redis使用RedisTemplate模板類的常用操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java消息摘要算法MAC實(shí)現(xiàn)與應(yīng)用完整示例

    Java消息摘要算法MAC實(shí)現(xiàn)與應(yīng)用完整示例

    這篇文章主要介紹了Java消息摘要算法MAC實(shí)現(xiàn)與應(yīng)用,結(jié)合完整實(shí)例形式分析了java消息摘要算法MAC的概念、原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Java使用Soap方式調(diào)用WebService接口代碼示例

    Java使用Soap方式調(diào)用WebService接口代碼示例

    Java調(diào)用WebService接口是指通過Java語言來訪問并與WebService進(jìn)行交互,WebService是一種基于Web的服務(wù)架構(gòu),它通過標(biāo)準(zhǔn)的XML和HTTP協(xié)議來提供服務(wù),這篇文章主要給大家介紹了關(guān)于Java使用Soap方式調(diào)用WebService接口的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • Java中字符串和byte數(shù)組之間的簡單轉(zhuǎn)換方法

    Java中字符串和byte數(shù)組之間的簡單轉(zhuǎn)換方法

    這篇文章主要給大家介紹了關(guān)于Java中字符串和byte數(shù)組之間的簡單轉(zhuǎn)換方法,Java中將String類型轉(zhuǎn)換為byte[]類型,可以使用String的getBytes()方法,還有很多其他的辦法,需要的朋友可以參考下
    2023-08-08
  • Java實(shí)現(xiàn)的自定義迭代器功能示例

    Java實(shí)現(xiàn)的自定義迭代器功能示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的自定義迭代器功能,結(jié)合具體實(shí)例形式分析了java簡單迭代器的實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • Java 跳出遞歸循環(huán)問題解決辦法

    Java 跳出遞歸循環(huán)問題解決辦法

    這篇文章主要介紹了 Java 跳出遞歸循環(huán)問題解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-07-07

最新評(píng)論