1。JNIの紹介
JNIは、Javaネイティブインターフェイスの英語の略語であり、Javaローカルインターフェイスを意味します。
問題の原因:Java Writingの基礎となる適用を実装することは困難であるため、Javaは非常に高いリアルタイムの要件を持つ一部の部分で処理することが困難です(リアルタイムの要件がまだ高い領域はありません。また、リアルタイムなどのトピックを調査する必要があります)。
解決策:JavaはJNIを使用して、既存のローカルライブラリ(C/C ++を呼び出して、システム関連のプログラムとクラスライブラリを開発します)。
2。JNIクイック学習チュートリアル
2.1質問:
jniを使用してコードを作成し、string_java_test_helloworld(jnienv *env、jclass cls、jstring j_str)関数を実装し、string j_str( "world")の前でhelloの追加を実装して戻ります。
2.2問題解決プロセス:
I. test.javaクラスを書く:
パブリッククラステスト{//ネイティブインターフェイスパブリックネイティブストリングHelloWorld(String Text); public static void main(string [] args){//動的ライブラリSystem.loadLibrary( "test2"); ts = new test();文字列テキスト= ts.helloworld( "world"); System.out.println(テキスト); }}述べる:
1。動的クラスライブラリをロード:System.LoadLibrary( "test2"); [Windowsにロードされたものはtest2.dllであり、Linuxにロードされたものはtest2.so]です。
ii。 test.javaファイルをコンパイルします
CMDを入力してコマンドを入力して> Javac test.javaを入力します
iii。 test.hファイルを生成します
CMD入力コマンド> Javahテストを入力します
test.hファイルの内容は次のとおりです。
/ *このファイルを編集しないでください - マシン生成されたマシンです */#クラステスト用の<jni.h>/ *ヘッダーを含む */#ifndef _included_test#define _included_test#ifdef __cplusplusextern "c" {#endif/ * *クラス:テスト *方法*/jniexport jstring jnicall java_test_helloworld(jnienv *、jobject、jstring);#ifdef __cplusplus}#endif#endif述べる:
1。関数宣言、固定形式:Jniexport;返品タイプ:JString; JNIコール:JNICALL; java_full class name_method name:java_test_helloworld;
2。関数パラメーター:jni.hを呼び出してカプセル化された関数ポインター:jnienv; Javaクラス自体:jobject、javaファイルの渡されたパラメーター:jstring。
IV。 c言語ファイルtest2.cを書き込み、ダイナミックリンクライブラリを呼び出すテストクラスの機能を実装します。
#include "test.h" #include <string.h> jniexport jstring jnicall java_test_hellowld(jnienv*env、job obj、jstring string){const char*str =(*env) - > getStringutfchars(env、string、0);チャップ[128]; cap [0] = 'h'; cap [1] = 'e'; cap [2] = 'l'; cap [3] = 'l'; cap [4] = 'o'; strcat(cap、str); (*env) - > releastringutfchars(env、string、0); return(*env) - > NewStringutf(env、cap); }述べる:
1。Java自体はダブルバイト文字を使用するため、C言語自体はシングルバイト文字であるため、(*env) - > getStringutfchars()を使用する必要があります。
2。 1つ目は、UTF8からCに変換されたエンコード形式で、2つ目はCの文字列に基づいてUTF8文字列を返すことです。
3。LELEASESTRINGUTFCHARS()は、オブジェクトを解放するために使用されます。 Garbage Collection用のJavaには仮想マシンがありますが、C言語では、これらのオブジェクトを手動でリサイクルする必要があります。
V.コンパイルして実行します
編集:
CMD入力コマンドを入力> gcc -i "
走る:
CMDを入力してコマンド> Javaテストを入力します
操作結果は次のとおりです。
こんにちは世界
3。概要:
ステップ1:ネイティブメソッドを使用してJavaクラス(test.java)を作成し、Javacツールを使用してJavaクラス(生成test.class)をコンパイルします。
ステップ2:Javahを使用して、ネイティブメソッドに対応するヘッダーファイル(test.h)を生成します。
ステップ3:C/C ++を使用して、対応するヘッダーファイル(TEST2.C)を実装し、それを動的リンクライブラリ(TEST2.SO)にコンパイルします。
この記事の実行中の環境:Windows 64ビットオペレーティングシステム、JDKバージョン1.8、MINGW64(GCC)。
上記のJava JNIクイック紹介チュートリアル(推奨)は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。