Java Native InterfaceJava Native Interface (JNI) on tarkvararaamistik, mis võimaldab Java virtuaalmasinas (JVM) jooksval Java programmil kutsuda välja operatsioonisüsteemi ja riistvaraspetsiifilisi rakendusi ning teeke, mis on kirjutatud teistes programmeerimiskeeltes, näiteks C, C++ ja Assembler.[1] EesmärgidJNI võimaldab programmeerijal lahendada olukorda, kus tarkvara kirjutamine täielikult Javas ei ole võimalik, näiteks kui Java standardteek ei toeta platvormispetsiifilist funktsionaalsust või teeki. Samuti aitab JNI taaskasutada varem mõnes muus programmeerimiskeeles kirjutatud teeki. JNI annab programmeerijale ligipääsu süsteemi madalatasemelistele ressurssidele, näiteks mälu ja I/O operatsioonidele, mis teevad programmi kirjutamise keerulisemaks, aga samas ka paindlikumaks.[2] Üldiselt soovitatakse JNI kasutamist võimalikult palju vältida, kuna väliste masinkoodiks kompileeritud teekide kasutamisega muutub rakendus platvormist sõltuvaks. Selle probleemi lahendamiseks tuleb iga platvormi jaoks kompileerida eraldi teek ning siis lasta Java koodil käivitamise ajal tuvastada kasutaja operatsioonisüsteem ja selle põhjal laadida õige teek.[1] KasutamineSelleks, et defineerida süsteemispetsiifilist (ingl native) funktsiooni, tuleb definitsioonis kasutada võtmesõna public class JniTest {
private static native int square(int x);
public static void main(String[] args) {
System.loadLibrary("jniTest");
System.out.println(square(20));
}
}
Nüüd sisestame käsureal /* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class JniTest */
#ifndef _Included_JniTest
#define _Included_JniTest
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: JniTest
* Method: square
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_JniTest_square
(JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
Implementatsiooni kirjutame faili #include "JniTest.h"
JNIEXPORT jint JNICALL Java_JniTest_square(JNIEnv *env, jclass thisOpj, jint x) {
return x * x;
}
Järgmiseks sammuks on C-keeles kirjutatud koodi kompileerimine Windowsil käsuga TüübidTabel näitab seoseid Java (JNI) ja C keele tüüpide vahel.[3]
JõudlusJNI võib tekitada märkimisväärset jõudluse kadu teatud tingimustel[4]:
Viited
|