Java 基盤テクノロジのオペレーティング システム呼び出しと JNI を実装する方法
Java プログラミングでは、通常、開発に高級言語機能と API を使用します。ただし、特定のニーズを満たすために、オペレーティング システムの基礎となる機能にアクセスする必要がある場合があります。この目的を達成するために、Javaは、システムコールを動作させる機構とJNI(Java Native Interface)を提供する。
オペレーティング システム コールとは、オペレーティング システムが提供する関数を呼び出すことによって、オペレーティング システムの基礎となる機能にアクセスする Java プログラムを指します。 JNI は、Java プログラムが基礎となる C/C コードと対話するためのメカニズムです。 JNI を通じて、低レベルのコードを記述し、Java プログラムでこれらの低レベル関数を呼び出すことができます。
以下では、オペレーティング システム コールと JNI を使用して Java 基盤テクノロジを実装する方法を詳しく紹介します。
1. オペレーティング システム コール
オペレーティング システム コールは、基礎となる API を呼び出すことによってオペレーティング システムの基礎となる機能にアクセスする Java プログラムです。 Java は、java.lang.Runtime クラスや java.lang.Process クラスなど、オペレーティング システム機能をカプセル化する一連のクラスを提供します。
以下は、java.lang.Runtime クラスを使用してオペレーティング システム コマンドを実行する方法を示す簡単な例です。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class OSCommandExample { public static void main(String[] args) { String command = "ls -l"; try { Process process = Runtime.getRuntime().exec(command); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); } catch (IOException e) { e.printStackTrace(); } } }
上の例では、 を渡します。 Runtime.getRuntime ().exec(command)
メソッドは、オペレーティング システム コマンドを実行し、BufferedReader
を通じてコマンドの出力を読み取ります。
次の例は、java.lang.Process クラスを使用してオペレーティング システム コマンドを実行する方法を示しています:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ProcessExample { public static void main(String[] args) { try { ProcessBuilder processBuilder = new ProcessBuilder("ls", "-l"); Process process = processBuilder.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); } catch (IOException e) { e.printStackTrace(); } } }
上の例では、ProcessBuilder を使用します。
作成するプロセスを作成し、start()
メソッドを通じてオペレーティング システム コマンドを実行します。次に、BufferedReader
を通じてコマンドの出力を読み取ります。
2. JNI (Java ネイティブ インターフェイス)
ハードウェア インターフェイスや特定のオペレーティング システム機能などの下位レベルの機能にアクセスする必要がある場合は、JNI を使用できます。 JNI は、Java プログラムが基礎となる C/C コードと対話するためのメカニズムです。
次は、JNI を使用して Java の基礎となるテクノロジを実装する方法を示す簡単な例です。
次に、Java クラスの例を示します。
public class NativeExample { public native void printMessage(String message); static { System.loadLibrary("mylib"); } public static void main(String[] args) { NativeExample example = new NativeExample(); example.printMessage("Hello from Java!"); } }
上の例では、ネイティブ メソッド printMessage
を宣言し、System を渡しました。 loadLibrary ()
メソッドはローカル ライブラリをロードします。次に、メイン メソッドでこのネイティブ メソッドを呼び出します。
jni.h
を使用してネイティブ ライブラリをコンパイルする必要があります。 以下はネイティブ ライブラリの例です:
#include <jni.h> #include <stdio.h> JNIEXPORT void JNICALL Java_NativeExample_printMessage(JNIEnv *env, jobject obj, jstring message) { const char *c_message = (*env)->GetStringUTFChars(env, message, NULL); printf("%s ", c_message); (*env)->ReleaseStringUTFChars(env, message, c_message); }
上の例では、ネイティブ メソッド Java_NativeExample_printMessage
を実装し、printf# を使用しました。 ## 関数は文字列を出力します。
gcc -shared -fpic -o libmylib.so NativeExample.c
gcc コンパイラを使用して C コードを
libmylib.so## にコンパイルします。 # 地元の図書館。
java -Djava.library.path=. NativeExample
上記のコマンドでは、現在のディレクトリ (
.#) を追加します。 ##) をライブラリ パスに追加し、NativeExample 経由で実行する Java クラスを指定します。
概要
オペレーティング システム コールと JNI を通じて、Java の基礎となるテクノロジを実装し、オペレーティング システムの基礎となる機能にアクセスできます。オペレーティング システム コールを使用すると、高レベルの API を使用してオペレーティング システムにアクセスできます。一方、JNI を使用すると、低レベルのコードを作成して Java プログラムで呼び出すことができます。
コードのセキュリティと信頼性を確保するために、基盤となるテクノロジを使用する場合は注意が必要であることに注意してください。
以上がオペレーティング システム コールと Java 基盤テクノロジの JNI を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。