Tip 23 Java: Tulis metode asli

Kemampuan untuk menulis hanya satu set kode di Java dan menjalankannya di setiap sistem dengan run-time Java adalah salah satu kekuatan utama Java. Tetapi independensi platform ini memiliki satu kelemahan utama: Apa yang kita lakukan dengan sejumlah besar kode yang ada? Triknya adalah dengan menggunakan apa yang disebut antarmuka metode asli .

Menulis metode native melibatkan pengimporan kode C ke dalam aplikasi Java Anda. Dalam tip ini saya akan memandu Anda melalui resep dasar untuk membuat metode asli dan menggunakannya dalam aplikasi Java.

Tujuh langkah untuk metode asli nirwana Langkah-langkah untuk membuat metode asli adalah sebagai berikut:

  • Tulis kode Java
  • Kompilasi kode Java
  • Buat header C ( file .h )
  • Buat file bertopik C.
  • Tulis kode C.
  • Buat pustaka kode bersama (atau DLL)
  • Jalankan aplikasi

Latihan kita adalah menulis beberapa teks ke konsol dari dalam metode asli. Spesifikasi dari contoh ini akan diarahkan ke sistem mirip Unix, khususnya Linux. Saya akan menunjukkan beberapa tempat di mana detailnya berbeda untuk platform lain.

Tulis kode Java

Tulis kode Java Anda seperti biasa. Untuk menggunakan metode asli dalam kode Java Anda, Anda harus melakukan dua hal. Pertama, tulis deklarasi metode native untuk setiap metode native yang ingin Anda gunakan. Ini seperti menulis deklarasi antarmuka metode Java biasa, tetapi Anda harus menentukan kata kunci native , sebagai berikut:

public native void printText (); 

Lingkaran kedua yang harus dilewati adalah Anda harus memuat pustaka kode native secara eksplisit. (Kita akan membuatnya nanti.) Kita melakukan ini dengan memuat perpustakaan di blok statis kelas:

statis {System.loadLibrary ("happy"); }

Untuk menggabungkan potongan-potongan ini sebagai contoh kita, buat file bernama Happy.javadengan konten berikut:

class Happy {public native void printText (); statis {System.loadLibrary ("happy"); / * Perhatikan huruf kecil nama kelas! * /} public static void main (String [] args) {Happy happy = new Happy (); happy.printText (); }}

Kompilasi kode Java

Kompilasi Happy.javafile:

% javac Happy.java 

Buat file header C.

Ada berbagai mantra sihir yang harus disediakan agar kode C kita dapat digunakan sebagai metode asli. The javahfungsi dari compiler Java akan menghasilkan deklarasi yang diperlukan dan seperti dari kami Happykelas. Ini akan membuat Happy.hfile untuk kita masukkan ke dalam kode C kita:

% javah Selamat 

Buat file bertopik C.

Dengan cara yang mengingatkan pada kekacauan yang dilakukan penerjemah C ++ ke nama metode C ++, kompiler Java memiliki kegilaan yang serupa. Untuk mengurangi rasa sakit karena harus menulis banyak kode yang membosankan sehingga kode C kita dapat dipanggil dari sistem run-time Java, compiler Java dapat membuat kode trampolin yang diperlukan secara otomatis untuk kita:

% javah -stubs Selamat 

Tulis kode C.

Sekarang, mari tulis kode sebenarnya untuk mencetak salam kita. Secara konvensi kami meletakkan kode ini dalam file yang dinamai sesuai kelas Java kami dengan string "Imp" yang ditambahkan padanya. Ini menghasilkan HappyImp.c. Tempatkan yang berikut ini ke HappyImp.c:

#include & ltStubPreamble.h> / * Barang metode asli standar. * / #include "Happy.h" / * Dihasilkan sebelumnya. * / #include & ltstdio.h> / * Barang C IO standar. * / void Happy_printText (struct HHappy * this) {put ("Happy New Year !!!"); }

Dalam menghubungkan kode C Anda dengan Java, banyak aspek lain yang terlibat - seperti cara meneruskan dan mengembalikan berbagai jenis. Untuk informasi lebih lanjut, lihat tutorial Java atau Makalah Metode Asli Hermetica (lihat bagian Sumberdaya untuk URL).

Buat perpustakaan bersama

Bagian ini paling bergantung pada sistem. Sepertinya setiap platform dan setiap kombinasi compiler / linker memiliki metode berbeda untuk membuat dan menggunakan pustaka bersama. Untuk orang-orang yang menggunakan salah satu dari berbagai platform Microsoft Windows, periksa dokumentasi compiler C Anda untuk mengetahui detailnya.

Untuk Anda para pengguna Linux, berikut cara membuat perpustakaan bersama menggunakan GCC. Pertama, kompilasi file sumber C yang sudah kita buat. Anda harus memberi tahu compiler di mana menemukan file dukungan metode native Java, tetapi trik utama di sini adalah Anda harus secara eksplisit memberi tahu compiler untuk menghasilkan P osisi I ndependent C ode :

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

Sekarang, buat pustaka bersama dari file objek (.o) yang dihasilkan dengan mantra ajaib berikut:

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

Salin file pustaka bersama ke nama pendek standar:

% cp libhappy.so.1.0 libhappy.so 

Terakhir, Anda mungkin perlu memberi tahu linker dinamis Anda di mana menemukan file pustaka bersama baru ini. Menggunakan bash shell:

% ekspor LD_LIBRARY_PATH = `pwd`: $ LD_LIBRARY_PATH 

Jalankan aplikasi

Jalankan aplikasi Java seperti biasa:

% java Selamat 

Nah, hanya itu saja. Terima kasih kepada Tony Dering karena telah menyampaikan mantera khusus Linux.

Catatan desain singkat

Sebelum terburu-buru menulis metode asli untuk semua kode lama itu, saya akan memperingatkan kita semua untuk melihat dengan cermat sistem yang ada dan melihat apakah ada cara yang lebih baik untuk menghubungkannya ke Java. Misalnya, ada Java Database Connectivity (JDBC) dan bahkan solusi tingkat yang lebih tinggi untuk mengakses database dari Java. Jadi, lihat semua trik di tas Anda dan gunakan apa yang masuk akal untuk proyek yang sedang dikerjakan.

Pelajari lebih lanjut tentang topik ini

  • JavaSoft Native Method Tuturial //www.javasoft.com/books/Series/Tutorial/native/implementing/index.html
  • Makalah Metode Asli Hermetica //www.hermetica.com/technologia/java/native/

Artikel ini, "Tip 23 Java: Menulis metode asli", awalnya diterbitkan oleh JavaWorld.