Programovanie

Tip Java 23: Napíšte natívne metódy

Schopnosť napísať iba jednu sadu kódu v Jave a nechať ju bežať na každom systéme s runtime Java je jednou z hlavných silných stránok Javy. Táto nezávislosť platformy však má jednu kľúčovú nevýhodu: Čo urobíme s veľkým množstvom existujúceho kódu? Trik je v použití tzv rozhranie natívnej metódy.

Zápis natívnych metód spočíva v importovaní kódu C do vašej aplikácie Java. V tomto tipe vás prevediem základným receptom na vytváranie natívnych metód a ich použitie v aplikácii Java.

Sedem krokov k natívnej metóde nirvana Kroky k vytvoreniu natívnych metód sú tieto:

  • Napíš kód Java
  • Zostavte kód Java
  • Vytvorte hlavičku C (.h súbor)
  • Vytvorte C pahýly spis
  • Napíšte kód C.
  • Vytvorte zdieľanú knižnicu kódov (alebo DLL)
  • Spustiť aplikáciu

Naším cvičením je napísať nejaký text na konzolu zvnútra natívnej metódy. Špecifiká tohto príkladu budú zamerané na systém podobný Unixu, konkrétne na Linux. Poukážem na pár miest, kde sa podrobnosti líšia pre iné platformy.

Napíš kód Java

Napíš svoj Java kód obvyklým spôsobom. Ak chcete v kóde Java použiť natívne metódy, musíte urobiť dve veci. Najskôr napíšte deklaráciu natívnej metódy pre každú natívnu metódu, ktorú chcete použiť. Je to ako písať deklaráciu bežného rozhrania metódy Java, ale musíte určiť domorodec kľúčové slovo, takto:

public native void printText (); 

Druhá obruč, cez ktorú skočíte, je musíte explicitne načítať natívnu knižnicu kódov. (Vytvoríme to neskôr.) Urobíme to načítaním knižnice do statického bloku triedy:

static {System.loadLibrary ("šťastný"); } 

Ak chcete pre náš príklad tieto kúsky spojiť, vytvorte súbor s názvom Happy.java s nasledujúcim obsahom:

trieda Happy {public native void printText (); static {System.loadLibrary ("šťastný"); / * Všimnite si malé meno triedy! * /} public static void main (String [] args) {Happy happy = new Happy (); happy.printText (); }} 

Zostavte kód Java

Zostavte Happy.java spis:

% javac Happy.java 

Vytvorte súbor hlavičky C.

Aby bolo možné náš kód C použiť ako natívnu metódu, musia byť k dispozícii rôzne zaklínadlá. The javah funkčnosť kompilátora Java vygeneruje potrebné vyhlásenia a podobne z našej Šťasný trieda. Týmto sa vytvorí Happy.h súbor, ktorý máme zahrnúť do nášho kódu C:

% javah Šťastný 

Vytvorte súbor C stubs

Spôsob, ktorý pripomína mangľovanie, ktoré prekladatelia v C ++ robia s názvami metód v C ++, má kompilátor Java podobné šialenstvo. Aby sme uľahčili prácu s písaním zdĺhavého kódu, aby bolo možné náš kód C vyvolať zo systému Java run-time, môže kompilátor Java pre nás automaticky vygenerovať potrebný kód na trampolíne:

% javah -stubs Šťastný 

Napíšte kód C.

Teraz napíšeme skutočný kód, aby sme vytlačili náš pozdrav. Podľa konvencie sme tento kód umiestnili do súboru pomenovaného po našej triede Java s pripojeným reťazcom „Imp“. Výsledkom je HappyImp.c. Vložte nasledujúce do HappyImp.c:

#include & ltStubPreamble.h> / * Štandardné natívne metódy. * / #include "Happy.h" / * Generované skôr. * / #include & ltstdio.h> / * Štandardné C IO veci. * / void Happy_printText (struct HHappy * this) {puts ("Šťastný nový rok !!!"); } 

Do prepojenia vášho C kódu s Javou patrí veľa ďalších aspektov - napríklad ako odovzdať a vrátiť nespočetné množstvo typov. Ďalšie informácie nájdete v tutoriáli Java alebo v dokumente Hermetica Native Methods (adresy URL nájdete v časti Zdroje).

Vytvorte zdieľanú knižnicu

Táto časť najviac závisí od systému. Zdá sa, že každá platforma a každá kombinácia kompilátora / linkera má iný spôsob vytvárania a používania zdieľaných knižníc. Pre ľudí, ktorí používajú ktorúkoľvek z rôznych platforiem Microsoft Windows, pozrite si dokumentáciu vášho kompilátora C, kde nájdete podrobnejšie informácie.

Pre vás, Linux, je tu návod, ako vytvoriť zdieľanú knižnicu pomocou GCC. Najskôr skompilujte zdrojové súbory C, ktoré sme už vytvorili. Musíte povedať kompilátoru, kde nájsť podporné súbory natívnej metódy Java, ale hlavným trikom je, že musíte výslovne povedať kompilátoru, aby vytvoril Position Janzávislý C.óda:

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

Teraz vytvorte zdieľanú knižnicu z výsledných súborov objektov (.o) s nasledujúcou magickou zaklínadlom:

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

Skopírujte súbor zdieľanej knižnice na štandardný krátky názov:

% cp libhappy.so.1.0 libhappy.so 

Nakoniec možno budete musieť povedať svojmu dynamickému linkeru, kde nájde tento nový súbor zdieľanej knižnice. Pomocou bash škrupina:

% export LD_LIBRARY_PATH = `pwd`: $ LD_LIBRARY_PATH 

Vykonajte aplikáciu

Spustite aplikáciu Java ako obvykle:

% java šťastný 

No a to je všetko. Ďakujeme Tonymu Deringovi za odovzdanie zaklínadiel špecifických pre Linux.

Rýchla poznámka o dizajne

Než sa pustíme do písania natívnych metód pre všetok tento starší kód, varoval by som nás všetkých, aby sme sa pozorne pozreli na existujúce systémy a zistili, či existujú lepšie spôsoby ich pripojenia k Jave. Napríklad existujú Java Database Connectivity (JDBC) a ešte vyššie riešenia pre prístup k databázam z Javy. Takže sa pozrite na všetky triky vo svojej taške a využite to, čo má pre daný projekt zmysel.

Získajte viac informácií o tejto téme

  • Výukový program natívnych metód JavaSoft //www.javasoft.com/books/Series/Tutorial/native/implementing/index.html
  • Papier pre natívne metódy Hermetica //www.hermetica.com/technologia/java/native/

Tento príbeh, „Java Tip 23: Write native methods“, bol pôvodne publikovaný spoločnosťou JavaWorld.

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