Programmēšana

Java 23. padoms: rakstiet vietējās metodes

Spēja rakstīt tikai vienu kodu kopu Java un likt tai darboties katrā sistēmā ar Java izpildlaiku ir viena no galvenajām Java priekšrocībām. Bet šai platformas neatkarībai ir viens galvenais trūkums: ko mēs darām ar milzīgo esošo kodu? Viltība ir izmantot tā saukto vietējās metodes interfeiss.

Vietējo metožu rakstīšana ietver C koda importēšanu Java lietojumprogrammā. Šajā padomā es iepazīstināšu jūs ar pamatmetodi vietējo metožu izveidošanai un izmantošanai Java lietojumprogrammā.

Septiņi soļi līdz vietējai metodei nirvana. Vietējo metožu izveide ir šāda:

  • Uzrakstiet Java kodu
  • Apkopo Java kodu
  • Izveidot C galveni (.h fails)
  • Izveidojiet C stublāji failu
  • Uzrakstiet C kodu
  • Izveidot koplietojamu kodu bibliotēku (vai DLL)
  • Palaist lietojumprogrammu

Mūsu uzdevums ir ierakstīt tekstu konsolē no iekšējās metodes. Šī piemēra specifika tiks virzīta uz Unix līdzīgu sistēmu, īpaši Linux. Es norādīšu pāris vietas, kur informācija par citām platformām atšķiras.

Uzrakstiet Java kodu

Uzrakstiet savu Java kodu kā parasti. Lai Java kodā izmantotu vietējās metodes, jums jādara divas lietas. Vispirms uzrakstiet vietējās metodes deklarāciju katrai vietējai metodei, kuru vēlaties izmantot. Tas ir tāpat kā parastās Java metodes saskarnes deklarācijas rakstīšana, taču jums jānorāda dzimtā šādi:

public native void printText (); 

Otrs loks, no kura jāiziet, ir skaidri jāielādē vietējā kodu bibliotēka. (Mēs to izveidosim vēlāk.) Mēs to darām, ielādējot bibliotēku klases statiskajā blokā:

statisks {System.loadLibrary ("laimīgs"); } 

Lai saliktu šos gabalus mūsu piemērā, izveidojiet failu ar nosaukumu Laimīga.java ar šādu saturu:

klase Happy {public native void printText (); statisks {System.loadLibrary ("laimīgs"); / * Ievērojiet klases nosaukuma mazos burtus! * /} public static void main (String [] args) {Priecīgs laimīgs = jauns Laimīgs (); laimīgs.printText (); }} 

Apkopo Java kodu

Sastādiet Laimīga.java fails:

% javac Happy.java 

Izveidojiet C galvenes failu

Ir dažādi burvju burvestības, kas jādara pieejami, lai mūsu C kodu varētu izmantot kā vietējo metodi. The javah Java kompilatora funkcionalitāte ģenerēs nepieciešamās deklarācijas un tādas no mūsu Laimīgs klasē. Tas radīs Laimīgs.h failu, kuru mēs iekļaujam savā C kodā:

% javah Priecīgs 

Izveidojiet C stubu failu

Java kompilatoram ir līdzīgs trakums tādā veidā, kas atgādina sajaukšanu, ko C ++ tulkotāji izdara C ++ metožu nosaukumos. Lai mazinātu sāpes, kad jāraksta daudz garlaicīga koda, lai mūsu C kodu varētu izsaukt no Java izpildlaika sistēmas, Java kompilators var automātiski ģenerēt nepieciešamo batuta kodu mums:

% javah -stubs Prieks 

Uzrakstiet C kodu

Tagad uzrakstīsim faktisko kodu, lai izdrukātu sveicienu. Pēc vienošanās mēs ievietojām šo kodu failā, kas nosaukts pēc mūsu Java klases, un tam pievienota virkne "Imp". Tā rezultātā HappyImp.c. Ievietojiet: HappyImp.c:

#include & ltStubPreamble.h> / * Standarta vietējās metodes sīkumi. * / # ietver "Happy.h" / * Izveidots agrāk. * / #include & ltstdio.h> / * Standarta C IO sīkumi. * / void Happy_printText (struct HHappy * this) {nodod ("Laimīgu Jauno gadu !!!"); } 

Saskaroties ar savu C kodu ar Java, tiek iesaistīti daudzi citi aspekti - piemēram, kā nodot un atdot neskaitāmus veidus. Lai iegūtu papildinformāciju, skatiet Java apmācību vai Hermetica vietējo metožu dokumentu (URL skatiet sadaļā Resursi).

Izveidojiet koplietojamu bibliotēku

Šī sadaļa ir visvairāk atkarīga no sistēmas. Šķiet, ka katrai platformai un katrai kompilatora / saišu kombinācijai ir atšķirīga koplietojamo bibliotēku izveides un izmantošanas metode. Cilvēkiem, kuri izmanto kādu no dažādām Microsoft Windows platformām, pārbaudiet C kompilatora dokumentāciju, lai uzzinātu sīkāku informāciju.

Jums, Linux ļaudīm, šeit ir norādīts, kā izveidot koplietojamu bibliotēku, izmantojot GCC. Vispirms apkopojiet jau izveidotos C avota failus. Jums jāsaka kompilatoram, kur atrast Java vietējās metodes atbalsta failus, taču galvenais triks šeit ir tas, ka jums skaidri jāpasaka kompilatoram, lai tas ražo Position Esnav atkarīgs Coda:

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

Tagad no iegūto objektu (.o) failiem izveidojiet koplietojamu bibliotēku ar šādu maģisku burvestību:

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

Kopējiet koplietojamās bibliotēkas failu uz standarta īso nosaukumu:

% cp libhappy.so.1.0 libhappy.so 

Visbeidzot, jums, iespējams, būs jāpastāsta savam dinamiskajam linkerim, kur atrast šo jauno koplietojamās bibliotēkas failu. Izmantojot bash apvalks:

% eksportēt LD_LIBRARY_PATH = "pwd": $ LD_LIBRARY_PATH 

Izpildiet lietojumprogrammu

Palaidiet Java lietojumprogrammu kā parasti:

% java Priecājies 

Nu, tas ir viss, kas tam ir. Paldies Tonijam Deringam par Linux specifisko burvestību nodošanu.

Ātra dizaina piezīme

Pirms steidzos rakstīt vietējās metodes visam šim mantotajam kodam, es brīdinātu mūs visus uzmanīgi apskatīt esošās sistēmas un noskaidrot, vai ir labāki veidi, kā tās savienot ar Java. Piemēram, ir Java Database Connectivity (JDBC) un pat augstāka līmeņa risinājumi piekļuvei datu bāzēm no Java. Tātad, apskatiet visus trikus savā somā un izmantojiet to, kas ir jēga šim projektam.

Uzziniet vairāk par šo tēmu

  • JavaSoft vietējās metodes apmācība //www.javasoft.com/books/Series/Tutorial/native/implementing/index.html
  • Hermetica vietējo metožu dokuments //www.hermetica.com/technologia/java/native/

Šo stāstu “Java Tip 23: Write native methods” sākotnēji publicēja JavaWorld.

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