Nativeキーワードの紹介:
Nativeキーワードは、JAVA言語とJAVA以外の言語で書かれたコードの塊やライブラリとの間のリンクとして機能し、もしかしたら使用するマシンに依存することになるかもしれません。 nativeキーワードがメソッドに適用された場合、そのメソッドはJNI(JAVA native interface)を介して他の言語(CやC++など)で書かれたネイティブコードを使用して実装されることを意味します。
構文:
ネイティブ コードの構文は、通常の関数定義と同じで、関数の最初に “native” キーワードが追加されます。 他のファイルでも使用できるようにpublicにする必要があります。 Stringは関数の戻り値のデータ型です。 キーワードによって、整数、文字、ブール値のいずれかになります。 この関数に渡されるパラメータも同様にstringデータ型です。
関数宣言の後、作成したオブジェクトと読み込んだライブラリを使ってこの関数を呼び出します。
public static void main(String args)
{
System.loadLibrary(“testing”);
testing testingnew = new testing();
String output = testingnew.stringMethod(“NATIVE”);
}
Library は最初にロードされて、そのオブジェクトが作成されなければなりません。 このオブジェクトの助けを借りて、ネイティブ関数が呼び出されます。
Native キーワードはどのように動作するのですか。 1 つは JAVA コードを含み、もう 1 つは C/C++ レガシー コードを含みます。 Java コードはレガシー コードを呼び出すために使用されます。 このレガシーコードはハードウェアと対話し、期待される出力を返します。
レガシーコードがハードウェアと対話するとき、JAVA によって敷かれたガイドラインに従いません。 このコードは、出力を得るために必要な処理を行い、その結果を JNI に渡します。 Javaネイティブ・インターフェースは、ネイティブ・コードに関連するすべてのルールを含むディレクトリをチェックします(これはSDKのjavah.exeというファイルの下にあります)。 JNIは、Javaツールキットの一部として設計されています。 この処理の後、JAVAは出力をJAVA言語自体で公開します。
ネイティブキーワードを使用する方法を説明する手順は以下のとおりです:
- ネイティブメソッド、共有ライブラリを読み込んだJAVAコードを書き、「ファイル名」を使用して保存します。
- JAVAコードをコンパイルし、バイトコードに変換する。
- 呼び出すべきネイティブ関数シグネチャを含むC/C++ヘッダーファイルを作成する。
- ネイティブメソッドの実装を含むC/C++コードを書く。
ネイティブキーワードの実装を示す例:
私たちはEclipseでコードを書き、コードを実行してライブラリを作成し、それを使用してCコードを実装する必要があります。slackerOne;
public class JPP {
public static native void pAccess();
public static native int pRead();
public static native void pWrite(int port, int output);
static{
System.GetCleaner(int output, int port), int output, int output);
Public class JPP {
#5149>Public static void pAccess(); #5149loadLibrary(“JPPlibs”);
}
public void jAccess(){
JPP.pAccess();
}
public int jRead(){
return JPP.pRead();
}
public void jWrite(int port, int output){
JPP.pWrite(port, output);
}
このコードをjavaプロジェクトの新しい「クラス」に保存したら、そのクラスは次のようになります。
これを実行すると、ライブラリが生成されます。
Output:
ここではJavaコードからネイティブコードとJava言語間でリンクとして作用するヘッダーファイルを作っています。
Advantages:
- JAVA に他の言語で書かれたコードと対話する追加の利点をもたらし、同じコードが JAVA で書かれる作業を減らし、したがって、コードの重複が減少されること。 他の言語で書かれたコードは、JAVAと比較して、機械語で動作する場合、より速いかもしれませんので。
- この方法を用いれば、直接システムコールを与えることができる。
- JAVAで書かれた任意の駆動コードを用いて、JAVA以外の言語で書かれたプリロードされたライブラリを動的に呼び出し、JAVAで応答を得ることができる。
- アプリケーションのためにすでに構築されたプラットフォーム依存のコードがあり、その機能がJAVAでサポートされていない場合、ネイティブコードを作成し、このネイティブコードをネイティブキーワードでJAVAにリンクすることができる。
ルール:
- Nativeキーワードはメソッド名の前に使用します。
- これらのメソッドはJAVAでは定義されていませんがC/C++言語では存在するので、Nativeメソッド宣言にはボディがなく、セミコロンで終了する必要があります。
- ネイティブメソッドは抽象メソッドとして宣言できません。
- 以前の古いコードがIEEE 754標準(The IEEE Standard for Floating-Point Arithmeticは、電気電子技術者協会が1985年に制定した浮動小数点演算の技術標準)に従って書かれているかどうかは確実ではないので、これらのネイティブメソッドをstrictftpとして宣言することはできないのです。
- Java Native Interface (JNI) 仕様は、Java とネイティブ コード間のデータ型の変換など、ネイティブ メソッドを実装するためのルールと宣言を定義するために JAVA によって設計されています。 これは、既存のコードを使用して効率的なコードを取得するために、ソフトウェアとハードウェアの相互作用が大きい場合に、重要なリンクとして使用することができます。 これは、ゼロから新しいアプリケーションコードを設計するのと比較して、実装作業を少なくすることができ、それを避けることができます。