日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JNI学习开始篇 基础知识 数据映射及学习资料收集

發布時間:2025/7/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JNI学习开始篇 基础知识 数据映射及学习资料收集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?JNI學習開始篇 基礎知識 數據映射及學習資料收集

?

JNI介紹

  JNI(Java Native Interface) ,Java本地接口。

  用Java去調用其他語言編寫的程序,比如C或C++。

  JNI作為二者連接的橋梁。

  Java的跨平臺本質主要是由于JVM不是跨平臺的,JNI本身也不是跨平臺的,即JNI是與特定平臺相關的

?

本地方法調用

  native關鍵字:使用native所修飾的方法為本地方法,該方法只有聲明,沒有實現,表示該實現是由C/C++來提供的。

  JNI本質上就是Java代碼調用動態鏈接庫的過程。

  在Windows上,動態鏈接庫就是一個dll文件;在Linux上,動態鏈接庫是so文件。

  如果在Linux上,那么調用的動態鏈接庫文件名必須以lib開頭。(Windows上無此限制。)

  Java程序例子如下(來自張龍老師“深入淺出JNI第一講”視頻教程):

  Java程序實例:

package com.meng.hellojni;public class HelloJNI {static// static代碼塊的執行時機,是在類被加載到JVM的時候 {// 告訴程序去哪里找本地方法的實現System.loadLibrary("libHello");// 不要加后綴名,因為加載方式是系統相關的 }// 使用native關鍵字,說明本方法為本地方法,其實現由C/C++提供public native void output();public static void main(String[] args){HelloJNI test = new HelloJNI();test.output();// 使用native方法時,認定其實現已經提供,當做一個普通的Java方法,直接使用就可以 }}

?

本地代碼

  現在要寫本地的實現。

  C++代碼一般由頭文件源程序文件兩部分組成。

  可以利用JDK中的javah工具,由Java代碼生成需要的頭文件。

  先javac編譯源文件,生成class文件,然后javah生成頭文件如下

?

/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_meng_hellojni_HelloJNI */#ifndef _Included_com_meng_hellojni_HelloJNI #define _Included_com_meng_hellojni_HelloJNI #ifdef __cplusplus extern "C" { #endif /** Class: com_meng_hellojni_HelloJNI* Method: output* Signature: ()V*/ JNIEXPORT void JNICALL Java_com_meng_hellojni_HelloJNI_output(JNIEnv *, jobject);#ifdef __cplusplus } #endif #endif

?

  也就是說,這個工具會根據Java代碼中的native聲明,生成對應需要的頭文件聲明。

  其中函數聲明固定以Java開頭,后面跟的是包名+類名+方法名,均以下劃線分隔。

  另外會加入兩個參數,第一個為JNIEnv *,第二個為jobject。

  在實現文件中,將頭文件的函數聲明拷過去,然后加上實現代碼即可。

  可以利用Visual Studio生成dll文件(需要include剛才生成的頭文件和jni頭文件(jni.h和jni_md.h)),然后把生成的dll文件放在Java程序找得到的路徑下,注意程序中庫和dll文件名字的對應,運行Java程序就可以調用。(本文這部分代碼沒有給出,有興趣請自己實現)。

?

JNI數據映射

? ? ? ? ? ? ? ? ? ? ? ?

  截圖自電子書《Android NDK Beginner's Guide》 Chapter 3

?

資料收集

?  Oracle's JNI page for Java 6, including the JNI Specification

?  Best practices for using the Java Native Interface

?  JNI Complete tutorial with examples

   Android Training: JNI Tips:

?  http://developer.android.com/training/articles/perf-jni.html

?  JAVA基礎之理解JNI原理

轉載于:https://www.cnblogs.com/mengdd/archive/2013/05/07/3064413.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的JNI学习开始篇 基础知识 数据映射及学习资料收集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。