Indledning om native nøgleord:
Det native nøgleord fungerer som en forbindelse mellem JAVA-sproget og en del af koden eller biblioteket, der er skrevet på andre sprog end JAVA, som måske afhænger af den maskine, du arbejder på. Hvis nøgleordet native anvendes til en metode, betyder det, at metoden vil blive implementeret ved hjælp af native kode skrevet i et andet sprog (som C eller C++) via JNI (JAVA native interface).
Syntaks:
Syntaksen for native kode er den samme som normal funktionsdefinition med nøgleordet “native” tilføjet i starten af funktionen.
For eksempel:
Public class testing
{public native String testMethod (String parameter);}
Her er public en adgangsmodifikator. Den skal være public, så en anden fil kan bruge den. String er den returnerede datatype for funktionen. Det kan være et heltal, et tegn eller en boolsk værdi afhængigt af nøgleordet. Den parameter, der overføres til denne funktion, er også af datatype string. Alt skal holdes under class.
Efter funktionsdeklaration kalder vi denne funktion via objekt oprettet og bibliotek indlæst.
public static void main(String args)
{
System.loadLibrary(“testing”);
testing testingnew = new testing();
String output = testingnew.stringMethod(“NATIVE”);
}
Det ovenfor definerede bibliotek skal først indlæses, og n dets objekt oprettes. Ved hjælp af dette objekt kaldes den native funktion.
Hvordan fungerer det native nøgleord?
Der skal være to filer. Den ene skal indeholde JAVA-kode, mens den anden skal indeholde C/C++ legacy-kode. Java-koden vil blive brugt til at kalde den ældre kode. Denne legacy-kode vil interagere med hardware og returnere det forventede output.
Når legacy-koden interagerer med hardware, vil den ikke følge de retningslinjer, der er fastlagt af JAVA. Denne kode vil foretage den ønskede behandling for at få output og videregive resultaterne til JNI. Java native interface vil derefter kontrollere i sin mappe, der indeholder alle de regler, der vedrører native kode (dette kommer under filen javah.exe i SDK). JNI er udviklet som en del af Java-værktøjssættet. Efter denne behandling vil JAVA offentliggøre resultaterne i selve JAVA-sproget. Når vi opretter et program i JAVA, skal vi sørge for, at der er en variabel/datastrømsforbindelse mellem JAVA-filen og legacy-filen, så der er en smidig datastrøm mellem dem begge.
Strækninger, der forklarer, hvordan man gør brug af native nøgleord, er angivet nedenfor:
- Skriv JAVA-koden, der indeholder native metode, shared library loaded, og gem den ved hjælp af “filnavn.JAVA”.
- Kompilér JAVA-koden og konverter koden til bytekode.
- Opret C/C++ header-fil, der indeholder signatur for den native funktion, der skal kaldes.
- Skriv C/C++-kode med implementering af native metode.
- Kør JAVA eksekverbar fil for at se resultaterne.
Eksempler til at vise implementering af native nøgleord:
Vi skal skrive kode i Eclipse og køre koden for at oprette et bibliotek, som derefter C-kode vil blive implementeret ved hjælp af.
Kode: pakke com.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.loadLibrary(“JPPlibs”);
}
public void jAccess(){
JPP.pAccess();
}
public int jRead(){
return JPP.pRead();
}
public void jWrite(int port, int output){
JPP.pWrite(port, output);
}
}
}
Efter at have gemt denne kode i ny “klasse” i java-projektet. Vi skal opsætte kørselsmiljøet for at generere headerfilen.