1. Pengantar JNI
JNI adalah singkatan bahasa Inggris dari antarmuka asli Java, yang berarti antarmuka lokal Java.
Sumber masalah: Karena sulit untuk mengimplementasikan penerapan yang mendasari penulisan Java, Java sulit ditangani di beberapa bagian dengan persyaratan waktu nyata yang sangat tinggi (belum ada area dengan persyaratan waktu nyata yang tinggi, dan topik-topik seperti waktu nyata perlu diselidiki).
Solusi: Java menggunakan JNI untuk memanggil perpustakaan lokal yang ada (C/C ++ untuk mengembangkan program terkait sistem dan perpustakaan kelas), yang sangat mengembangkan Java.
2. JNI Tutorial Pembelajaran Cepat
2.1 Pertanyaan:
Tulis sepotong kode menggunakan JNI, implementasikan string_java_test_helloworld (jnienv *env, JClass cls, jString j_str) fungsi, terapkan penambahan hello di depan string j_str ("world") dan return.
2.2 Proses Resolusi Masalah:
I. Tulis kelas test.java:
tes kelas publik {// Antarmuka asli Publik Native String HelloWorld (Teks String); public static void main (string [] args) {// memuat sistem pustaka dinamis.loadLibrary ("test2"); Tes ts = tes baru (); String text = ts.helloworld ("world"); System.out.println (teks); }}Komentar:
1. Memuat Perpustakaan Kelas Dinamis: System.LoadLibrary ("Test2"); [Yang dimuat di windows adalah test2.dll, dan yang dimuat di linux adalah test2.so]
Ii. Compile test.java file
Masukkan CMD untuk memasukkan perintah> javac test.java
AKU AKU AKU. Menghasilkan file test.h
Masukkan perintah input cmd> tes javah
Isi file test.h adalah sebagai berikut:
/ * Jangan mengedit file ini - mesin ini dihasilkan */#sertakan <jni.h>/ * header untuk tes kelas */#ifndef _included_test#define _included_test#ifdef __cplusplusExtern "c" {#endif/ * class: test * Method: Helloworxtern "c" (Ljava/lang/string;) ljava/lang/string; */Jniexport jString jnicall java_test_helloworld (jnienv *, jobject, jstring);#ifdef __cplusplus}#endif#endifKomentar:
1. Deklarasi fungsi, format tetap: jniexport; Jenis pengembalian: jString; JNI Call: Jnicall; Java_full class name_method Nama: java_test_helloworld;
2. Parameter Fungsi: Panggil JNI.H ke Pointer Fungsi yang Dienkapsulasi: JNienV; Java Class sendiri: Jobject, file java lulus parameter: jString.
Iv. Tulis C Bahasa Test Bahasa.
#include "test.h" #include <string.h> jniexport jString jnicall java_test_helloworld (jnienv*env, pekerjaan obj, string jString) {const char*str = (*env)-> gettringutfchars (env, string, 0); Char Cap [128]; cap [0] = 'h'; cap [1] = 'e'; cap [2] = 'l'; cap [3] = 'l'; cap [4] = 'o'; strcat (cap, str); (*env)-> rilisestringutfchars (env, string, 0); return (*env)-> newstringutf (env, cap); }Komentar:
1. Karena Java sendiri menggunakan karakter double-byte, bahasa C itu sendiri adalah karakter byte tunggal, jadi Anda perlu menggunakan (*env)-> getstringutfchars () untuk mengonversi string antara java dan c;
2. Getstringutfchars () dan newstringutf (). Yang pertama adalah format pengkodean yang dikonversi dari UTF8 ke C, dan yang kedua adalah mengembalikan string UTF8 berdasarkan string C;
3. Releasestringutfchars () digunakan untuk melepaskan objek. Ada mesin virtual di Java untuk pengumpulan sampah, tetapi dalam bahasa C, benda -benda ini harus didaur ulang secara manual, jika tidak kebocoran memori dapat terjadi.
V. Kompilasi dan jalankan
Kompilasi:
Masukkan perintah input cmd> gcc -i "d:/file program/java/jdk1.8.0_45/include" -i "d:/file program/java/jdk1.8.0_45/include/win32" --share test2.c -o test2.dll
berlari:
Masukkan CMD untuk memasukkan perintah> tes java
Hasil operasi adalah sebagai berikut:
Helloworld
3. Ringkasan:
Langkah 1: Tulis kelas Java (test.java) dengan metode asli, dan gunakan alat Javac untuk mengkompilasi kelas Java (menghasilkan test.class);
Langkah 2: Gunakan Javah untuk menghasilkan file header (test.h) yang sesuai dengan metode asli;
Langkah 3: Gunakan C/C ++ untuk mengimplementasikan file header yang sesuai (test2.c) dan mengkompilasinya menjadi pustaka tautan dinamis (test2.so).
Lingkungan yang berjalan dari artikel ini: Sistem Operasi Windows 64-Bit, JDK Versi 1.8, Mingw64 (GCC).
Tutorial pengantar cepat Java JNI di atas (disarankan) adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.