Programiranje

Nasvet Java 23: Napišite izvorne metode

Sposobnost pisanja samo enega niza kode v Javi in ​​zagon v vsakem sistemu s časom izvajanja Java je ena od glavnih prednosti Jave. Toda ta neodvisnost platforme ima eno ključno pomanjkljivost: kaj naredimo z veliko količino obstoječe kode? Trik je v uporabi tako imenovane izvorni vmesnik metode.

Pisanje izvornih metod vključuje uvoz C kode v vašo aplikacijo Java. V tem nasvetu vam bom predstavil osnovni recept za ustvarjanje izvornih metod in njihovo uporabo v aplikaciji Java.

Sedem korakov do izvorne metode nirvana Koraki za ustvarjanje izvornih metod so naslednji:

  • Napišite kodo Java
  • Prevedite kodo Java
  • Ustvari glavo C (.h mapa)
  • Ustvari C škrbine mapa
  • Napiši kodo C.
  • Ustvari knjižnico kod v skupni rabi (ali DLL)
  • Zaženite aplikacijo

Naša vaja je, da v konzolo napišemo nekaj besedila znotraj izvorne metode. Posebnosti tega primera bodo usmerjene k Unixu podobnemu sistemu, natančneje Linuxu. Izpostavil bom nekaj mest, kjer se podrobnosti razlikujejo za druge platforme.

Napišite kodo Java

Kodo Java napišite kot običajno. Če želite v svoji kodi Java uporabljati izvorne metode, morate narediti dve stvari. Najprej napišite deklaracijo izvorne metode za vsako izvorno metodo, ki jo želite uporabiti. To je tako kot pisanje izjave običajnega vmesnika metode Java, vendar morate določiti domač ključna beseda, kot sledi:

javni izvorni void printText (); 

Drugi obroč, skozi katerega morate skočiti, je, da morate izrecno naložiti knjižnico izvorne kode. (To bomo ustvarili kasneje.) To naredimo tako, da knjižnico naložimo v statični blok razreda:

statična {System.loadLibrary ("srečna"); } 

Če želite sestaviti te dele za naš primer, ustvarite datoteko z imenom Srečno.java z naslednjo vsebino:

razred srečen {public native void printText (); statična {System.loadLibrary ("srečna"); / * Upoštevajte male črke imena razreda! * /} javna statična void main (String [] args) {Happy happy = novo Happy (); happy.printText (); }} 

Prevedite kodo Java

Sestavite Srečno.java mapa:

% javac Happy.java 

Ustvarite datoteko z glavo C.

Na voljo morajo biti različni čarovniški čarovniki, da lahko našo kodo C uporabimo kot izvorno metodo. The javah funkcionalnost prevajalnika Java bo ustvarila potrebne izjave in podobno iz našega Srečno razred. To bo ustvarilo Vesel.h datoteko, ki jo bomo vključili v našo kodo C:

% javah Srečno 

Ustvarite datoteko z orožji C.

Prevajalec Java ima podobno norost na nek način, ki spominja na manglanje, ki ga prevajalci C ++ počnejo z imeni metod C ++. Da bi olajšal bolečino, ko bi morali pisati veliko dolgočasne kode, da bi lahko našo kodo C priklicali iz sistema za izvajanje Java, nam lahko prevajalnik Java samodejno ustvari potrebno kodo trampolina:

% javah -stubs Vesel 

Napiši kodo C.

Zdaj napišimo dejansko kodo, da natisnemo naš pozdrav. Po dogovoru to kodo shranimo v datoteko, imenovano po našem razredu Java, ki ji je dodan niz "Imp". Posledica tega je HappyImp.c. Vstavite naslednje v HappyImp.c:

#include & ltStubPreamble.h> / * Standardne izvorne metode. * / #include "Happy.h" / * Ustvarjeno prej. * / #include & ltstdio.h> / * Standardne stvari C IO. * / void Happy_printText (struct HHappy * this) {postavlja ("Srečno novo leto !!!"); } 

Pri povezovanju vaše kode C z Javo so vključeni številni drugi vidiki - na primer kako prenesti in vrniti nešteto vrst. Če želite več informacij, glejte vadnico Java ali članek Hermetica Native Methods (za URL-je glejte razdelek Viri).

Ustvarite knjižnico v skupni rabi

Ta razdelek je najbolj odvisen od sistema. Zdi se, da ima vsaka platforma in vsaka kombinacija prevajalnika / povezovalnika drugačen način ustvarjanja in uporabe knjižnic v skupni rabi. Za ljudi, ki uporabljajo katero koli različno platformo Microsoft Windows, si oglejte podrobnosti v dokumentaciji za vaš prevajalnik C.

Tukaj je opisano, kako ustvarite knjižnico v skupni rabi z uporabo GCC. Najprej sestavite izvorne datoteke C, ki smo jih že ustvarili. Prevajalniku morate povedati, kje najti datoteke za podporo izvorne metode Java, vendar je glavni trik v tem, da morate prevajalniku izrecno povedati, naj ustvari Pstanje jazneodvisno Code:

% gcc -I / usr / local / java / include -I / usr / local / java / include / genunix -fPIC -c Happy.c HappyImp.c 

Zdaj iz nastalih datotek objekta (.o) ustvarite knjižnico v skupni rabi z naslednjim čarobnim zakletjem:

% gcc -shared -Wl, -soname, libhappy.so.1 -o libhappy.so.1.0 Happy.o HappyImp.o 

Datoteko knjižnice v skupni rabi kopirajte v standardno kratko ime:

% cp libhappy.so.1.0 libhappy.so 

Na koncu boste morda morali svojemu dinamičnemu povezovalniku povedati, kje najti novo datoteko knjižnice v skupni rabi. Uporabljati bash lupina:

% izvoz LD_LIBRARY_PATH = `pwd`: $ LD_LIBRARY_PATH 

Izvedite aplikacijo

Zaženite aplikacijo Java kot običajno:

% java Srečno 

No, to je vse. Zahvaljujemo se Tonyju Deringu za posredovanje zakletv, specifičnih za Linux.

Hitra oblikovalska opomba

Preden se lotimo pisanja izvornih metod za vso to zapuščinsko kodo, bi vse opozoril, da natančno preučimo obstoječe sisteme in preverimo, ali obstajajo boljši načini, kako jih povezati z Javo. Na primer, obstajajo Java Database Connectivity (JDBC) in celo rešitve na višji ravni za dostop do baz podatkov iz Jave. Torej, poglejte vse trike v torbi in uporabite smisel za zadevni projekt.

Preberite več o tej temi

  • Vadba za izvorno metodo JavaSoft //www.javasoft.com/books/Series/Tutorial/native/implementing/index.html
  • Hermetica Native Methods Paper //www.hermetica.com/technologia/java/native/

To zgodbo, "Java Nasvet 23: Napišite izvorne metode", je prvotno objavil JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found