1. Introduction à JNI
JNI est l'abréviation anglaise de l'interface native Java, ce qui signifie l'interface locale Java.
Source du problème: Puisqu'il est difficile de mettre en œuvre l'application sous-jacente de l'écriture Java, Java est difficile à gérer dans certaines parties avec des exigences en temps réel très élevées (il n'y a pas encore de domaines avec des exigences en temps réel élevées, et des sujets comme en temps réel doivent être étudiés).
Solution: Java utilise JNI pour appeler les bibliothèques locales existantes (C / C ++ pour développer tous les programmes et bibliothèques de classe liés au système), qui développent considérablement Java.
2. Tutoriel d'apprentissage rapide JNI
2.1 Question:
Écrivez un morceau de code à l'aide de JNI, implémentez la fonction string_java_test_helowlorld (jniienv * env, jclass cls, jString j_str), implémentez l'ajout de bonjour devant la chaîne j_str ("world") et return.
2.2 Processus de résolution des problèmes:
I. Écrivez la classe Test.java:
Classe publique Test {// Interface native publique native String Helloworld (String Text); public static void main (String [] args) {// Charge Dynamic Library System.LoadLibrary ("test2"); Test ts = new test (); String text = ts.Helloworld ("world"); System.out.println (texte); }}Remarque:
1. Load Dynamic Class Library: System.LoadLibrary ("test2"); [Celui qui est chargé sous Windows est test2.dll, et celui qui est chargé en linux est test2.so]
Ii Fichier compile Test.java
Entrez CMD pour entrer la commande> javac test.java
Iii. Générer le fichier test.h
Entrez la commande d'entrée CMD> Test Javah
Le contenu du fichier test.h est le suivant:
/ * Ne modifiez pas ce fichier - il est généré à la machine * / # Inclure <jni.h> / * En-tête pour le test de classe * / # ifndef _included_test # define _included_test # ifdef __cplusplusExtern "C" {# endIF / * * Class: Test * Method: Helloworld * Signature: (ljava / lang / string;) Java / Lang; NotreRemarque:
1. Déclaration de fonction, format fixe: Jniexport; Type de retour: JString; Jni Appel: Jnicall; Java_full class name_method name: java_test_heloworld;
2. Paramètres de fonction: Appelez Jni.h pour encapsuler le pointeur de fonction: JNienv; Classe Java elle-même: Jobject, Fichier Java PARADERS PASSÉ: JSTRING.
Iv. Écrivez C Fichier de Langue C test2.c pour implémenter la fonction de la classe de liaison dynamique de classe de test:
#include "test.h" #include <string.h> jniexport jstring jnicall java_test_helowlorld (jNienv * Env, Job obj, jString String) {const char * str = (* Env) -> getStringUtfchars (Env, String, 0); Char Cap [128]; cap [0] = 'h'; cap [1] = 'e'; cap [2] = 'l'; cap [3] = 'l'; cap [4] = 'o'; strcat (cap, str); (* Env) -> releasesringUtfchars (Env, String, 0); return (* env) -> NewstringUtf (env, cap); }Remarque:
1. Étant donné que Java elle-même utilise des caractères en double octets, C Langue elle-même est des caractères à un octet, vous devez donc utiliser (* Env) -> getStringUtFchars () pour convertir la chaîne entre Java et C;
2. GetStringutfchars () et NewstringUtf (). Le premier est le format de codage converti de UTF8 en C, et le second est de renvoyer une chaîne UTF8 basée sur la chaîne de C;
3. ReleasEstRingUtFchars () est utilisé pour libérer des objets. Il y a des machines virtuelles en Java pour la collecte des ordures, mais dans le langage C, ces objets doivent être recyclés manuellement, sinon des fuites de mémoire peuvent se produire.
V. compiler et courir
Compilation:
Entrez la commande CMD Input> gcc -i "d: / programme files / java / jdk1.8.0_45 / include" -i "d: / programme files / java / jdk1.8.0_45 / include / win32" --share test2.c -o test2.dll
courir:
Entrez CMD pour entrer la commande> Test Java
Les résultats de l'opération sont les suivants:
Bonjour le monde
3. Résumé:
Étape 1: Écrivez une classe Java (test.java) avec les méthodes natives et utilisez l'outil Javac pour compiler la classe Java (générer Test.Class);
Étape 2: Utilisez Javah pour générer le fichier d'en-tête (test.h) correspondant à la méthode native;
Étape 3: Utilisez C / C ++ pour implémenter le fichier d'en-tête correspondant (test2.c) et compiler dans une bibliothèque de liens dynamiques (test2.so).
L'environnement en cours d'exécution de cet article: Système d'exploitation Windows 64 bits, JDK version 1.8, Mingw64 (GCC).
Le tutoriel Java Java JNI Quick Introduction (recommandé) est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.