Esittely natiivi-avainsanaan:
Natiivi-avainsana toimii linkkinä JAVA-kielen ja koodin tai kirjaston välillä, joka on kirjoitettu muilla kielillä kuin JAVA:lla ja joka voi olla riippuvainen koneesta, jolla käytät. Jos natiivia avainsanaa käytetään metodiin, se tarkoittaa, että metodi toteutetaan käyttämällä natiivia koodia, joka on kirjoitettu jollakin muulla kielellä (kuten C tai C++) JNI:n (JAVA native interface) kautta.
Syntaksi:
Natiivikoodin syntaksi on sama kuin normaali funktiomäärittely, mutta funktion alkuun on lisätty ”natiivi”-avainsana.
Besimerkki:
Julkinen luokka testing
{public native String testMethod (String parametri);}
Tässä public on käyttöoikeutta muuttava tekijä. Sen tulee olla julkinen, jotta toinen tiedosto voi käyttää sitä. String on funktion paluun tietotyyppi. Se voi olla kokonaisluku, merkki tai Boolean avainsanasta riippuen. Myös tälle funktiolle annettu parametri on tietotyypiltään merkkijono. Kaikki tulee pitää luokan alla.
Funktion julistuksen jälkeen kutsumme tätä funktiota luodun objektin ja ladatun kirjaston kautta.
public static void main(String args)
{
System.loadLibrary(”testing”);
testing testingnew = new testing();
String output = testingnew.stringMethod(”NATIVE”);
}
Yllä määritetty kirjasto ladataan ensin ja n sen objekti luodaan. Tämän objektin avulla kutsutaan natiivifunktiota.
Miten natiivi-avainsana toimii?
Tässä pitäisi olla kaksi tiedostoa. Toinen sisältää JAVA-koodia ja toisessa pitäisi olla C/C++ legacy-koodi. Java-koodia käytetään kutsumaan legacy-koodia. Tämä perintökoodi on vuorovaikutuksessa laitteiston kanssa ja palauttaa odotetun tulosteen.
Kun perintökoodi on vuorovaikutuksessa laitteiston kanssa, se ei noudata JAVA:n antamia ohjeita. Tämä koodi tekee halutun käsittelyn saadakseen tuloksen ja välittää tulokset JNI:lle. Javan natiivirajapinta tarkistaa sitten hakemistossaan, joka sisältää kaikki natiivikoodiin liittyvät säännöt (tämä on SDK:n tiedostossa nimeltä javah.exe). JNI on suunniteltu osaksi Java-työkalupakettia. Tämän käsittelyn jälkeen JAVA julkaisee tulokset itse JAVA-kielellä. Kun luomme ohjelmaa JAVA:ssa, meidän on varmistettava, että JAVA-tiedoston ja perintötiedoston välillä on muuttuja-/tiedonkulkuyhteys, jotta molempien välillä on sujuva tiedonkulku.
Vaiheet, joissa selitetään, miten natiivien avainsanojen käyttö tapahtuu, ovat seuraavat:
- Kirjoitetaan natiivin metodin sisältävä JAVA-koodi, joka sisältää natiivin metodin, jaetun kirjaston, joka on ladattu, ja tallennetaan se käyttämällä tiedostoa tiedostoa ”filename.JAVA”.
- Kompiloi JAVA-koodi ja muunna koodi tavukoodiksi.
- Luo C/C++-otsikkotiedosto, joka sisältää kutsuttavan natiivifunktion allekirjoituksen.
- Kirjoita C/C++-koodi, jossa on natiivin metodin toteutus.
- Ajoita JAVA:n suoritettava tiedosto nähdäksesi tulokset.
Esimerkkejä natiivin avainsanan toteutuksen näyttämiseksi:
Kirjoitetaan koodi Eclipseen ja ajetaan koodi luodaksemme kirjaston, jonka avulla sitten toteutetaan C-koodi.
Koodi: package 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);
}
}
Tallennettuani tämän koodin java-projektin uuteen ”luokkaan”. Meidän on määritettävä ajoympäristö otsikkotiedoston luomiseksi.
Hyötyjä:
- Se tarjoaa JAVA:lle lisäetua vuorovaikutuksessa muilla kielillä kirjoitetun koodin kanssa ja vähentää saman koodin kirjoittamista JAVA:lla ja siten vähentää koodin redundanssia.
- Se parantaa koodin yleistä suorituskykyä. Koska muulla kielellä kirjoitettu koodi voi olla nopeampaa, kun se toimii konekielen kanssa verrattuna JAVAan. Voimme sitten käyttää JAVA-ohjelmaa kutsuaksemme tätä koodia.
- Käyttämällä tätä lähestymistapaa voimme antaa suoraan järjestelmäkutsuja. Näin vähennetään ulkoisten häiriöiden todennäköisyyttä ja parannetaan koodin suorituksen nopeutta.
- Voidaan dynaamisesti kutsua esiladattua kirjastoa (joka on kirjoitettu millä tahansa muulla kielellä kuin JAVA:lla) käyttämällä mielivaltaista JAVA:lla kirjoitettua ajokoodia ja saada silti vastaus JAVA:lla.
- JAVA:n on mahdollista päästä käsiksi laitteistoresursseihin, jotka ovat vain muiden kielten käytettävissä.
- Jos sovellukselle on jo rakennettu alustariippuvainen koodi, jonka ominaisuuksia ei tueta JAVA:n kautta, siinä tapauksessa meillä voi olla natiivikoodi ja linkittää tämän natiivikoodin JAVA:han natiivi-avainsanalla.
Säännöt:
- Native-avainsanaa on käytettävä ennen metodin nimeä.
- Native-metodi-ilmoituksessa ei ole runkoa, ja sen tulee päättyä puolipisteeseen, koska näitä metodeja ei ole määritelty JAVA:ssa, mutta ne ovat C/C++-kielessä.
- Natiiveja metodeja ei voi julistaa abstrakteiksi metodeiksi.
- Koska ei ole varmuutta siitä, onko edellinen vanha koodi kirjoitettu IEEE 754 -standardin mukaisesti (The IEEE Standard for Floating-Point Arithmetic on Institute of Electrical and Electronics Engineersin vuonna 1985 perustama liukulukuaritmetiikan tekninen standardi), niinpä näitä natiiveja metodeja ei voi julistaa strictftp:ksi.
- Java Native Interface (JNI) -spesifikaatio on JAVA:n suunnittelema, jotta voidaan määritellä säännöt ja ilmoitukset natiivien metodien toteuttamiseksi, kuten tietotyyppien muuntaminen Javan ja natiivikoodin välillä.
Johtopäätös:
Native-avainsana on se, joka kuroo umpeen kuilun natiivien kielten ja JAVA:n välillä. Sitä voidaan käyttää kriittisenä lenkkinä, jos ohjelmistomme vuorovaikutus laitteiston kanssa on enemmän saada tehokas koodi käyttämällä jo olemassa olevaa koodia. Se tekee toteutustyöstä vähäisempää verrattuna uuden sovelluskoodin suunnitteluun tyhjästä aina, kun se voitaisiin välttää.