1. Einführung in JNI
JNI ist die englische Abkürzung der Java Native Interface, was die lokale Java -Schnittstelle bedeutet.
Quelle des Problems: Da es schwierig ist, die zugrunde liegende Anwendung des Java-Schreibens zu implementieren, ist Java in einigen Teilen mit sehr hohen Echtzeitanforderungen schwer zu handhaben (es gibt noch keine Bereiche mit hohen Echtzeitanforderungen und Themen wie Echtzeit müssen untersucht werden).
Lösung: Java verwendet JNI, um vorhandene lokale Bibliotheken aufzurufen (C/C ++, um systembezogene Programme und Klassenbibliotheken zu entwickeln), die Java sehr flexibel entwickeln.
2. Jni Quick Learning Tutorial
2.1 Frage:
Schreiben Sie ein Stück Code mit JNI, implementieren Sie die Funktion String_java_test_Helloworld (JNIENV *ENV, JCLASS CLS, Jstring J_str), implementieren Sie die Hinzufügung von Hello vor der String J_str ("Welt") und return.
2.2 Prozessauflösungsprozess:
I. Schreiben Sie den Test.java -Klasse:
public class test {// native Schnittstelle öffentliche native String HelloWorld (String Text); public static void main (String [] args) {// Dynamisches Bibliothekssystem laden.loadlibrary ("test2"); Test ts = neuer Test (); String text = Ts.Helloworld ("Welt"); System.out.println (Text); }}Bemerkung:
1. Last dynamischer Klassenbibliothek: System.loadlibrary ("test2"); [Der in Windows geladene Test2.Dll ist und der in Linux geladen ist test2.so SO]
Ii. TEST.JAVA -Datei kompilieren
Geben Sie CMD ein, um den Befehl> Javac test.java einzugeben
III. Test.h -Datei generieren
Geben Sie den CMD -Eingangsbefehl> Javah -Test ein
Der Inhalt der Datei test.h ist wie folgt:
/ * Bearbeiten Sie diese Datei nicht - es ist ein Maschine generiert */#include <Jni.h>/ * Header für den Klassentest */#ifndef _included_test#Define _included_test#ifdef __cpluSplusextern "C" {#endif/ * class: test * methode: helloworld * Signature: (Ljava/lang/string;) ljava/lang/string; */Jniexport jstring jnicall java_test_helloworld (jnienv *, jobject, jstring);#ifdef __cplusplus}#endif#endifBemerkung:
1. Funktionserklärung, festes Format: Jniexport; Rückgabetyp: JString; Jni Call: Jnicall; Java_full class name_method name: java_test_helloworld;
2. Funktionsparameter: Rufen Sie jni.h auf eingekapselten Funktionszeiger: Jnienv; Java -Klasse selbst: Jobject, Java -Datei haben Parameter übergeben: JString.
Iv. Schreiben Sie C Language Datei test2.c, um die Funktion der Testklasse zu implementieren, die dynamische Linkbibliothek aufruft:
#include "test.h" #include <string.h> jniexport jstring jnicall java_test_helloworld (jnienv*env, Job obj, jstring String) {const char*str = (*env)-> getstringutfchars (enge, String, 0); Char Cap [128]; CAP [0] = 'H'; CAP [1] = 'e'; CAP [2] = 'L'; CAP [3] = 'L'; CAP [4] = 'O'; Strcat (Cap, str); (*env)-> releasestringutfchars (env, String, 0); return (*env)-> newStringutf (env, Cap); }Bemerkung:
1. Da Java selbst Doppel-Byte-Zeichen verwendet, sind C-Sprache selbst Einzelbyte-Zeichen, sodass Sie (*env)-> getstringutfchars () verwenden müssen, um die Zeichenfolge zwischen Java und C zu konvertieren;
2. GetStringutfchars () und NewStringUtf (). Das erste ist das von UTF8 nach C konvertierte Codierungsformat, und das zweite besteht darin, eine UTF8 -String basierend auf der Zeichenfolge von C zurückzugeben.
3.. ReleasStringutfchars () wird verwendet, um Objekte freizusetzen. In Java gibt es virtuelle Maschinen für die Müllsammlung, aber in der C -Sprache müssen diese Objekte manuell recycelt werden, sonst können Speicherlecks auftreten.
V. kompilieren und rennen
Zusammenstellung:
Geben Sie den Befehl cmd input ein
laufen:
Geben Sie CMD ein, um den Befehl> Java -Test eingeben zu können
Die Betriebsergebnisse sind wie folgt:
HelloWorld
3. Zusammenfassung:
Schritt 1: Schreiben Sie eine Java -Klasse (test.java) mit nativen Methoden und verwenden Sie das Javac -Tool, um die Java -Klasse zu kompilieren (test.class);
Schritt 2: Verwenden Sie Javah, um die Header -Datei (test.h) zu generieren, die der nativen Methode entspricht.
Schritt 3: Verwenden Sie C/C ++, um die entsprechende Header -Datei (test2.c) zu implementieren und in eine dynamische Verbindungsbibliothek (Test2.SO) zu kompilieren.
Die laufende Umgebung dieses Artikels: Windows 64-Bit-Betriebssystem, JDK Version 1.8, Mingw64 (GCC).
Das obige Tutorial von Java Jni Quick Einführung (empfohlen) ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.