亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Jadual Kandungan
? Bagaimana JNI Berfungsi: Gambar Besar
? Contoh langkah demi langkah: Memanggil C dari Java
1. Tulis kelas Java
2. Menjana fail header menggunakan javah (ditutup) atau javac -h
3. Melaksanakan kaedah asli dalam c
4. Menyusun kod C ke dalam perpustakaan bersama
Pada Linux/MacOS:
Pada Windows (menggunakan Mingw atau MSVC):
5. Jalankan program
? Lulus dan mengembalikan jenis data
Contoh: Tambahkan dua bilangan bulat dalam c
? Mengakses bidang dan kaedah Java dari kod asli
?? Perangkap biasa & amalan terbaik
? Bilakah anda harus menggunakan JNI?
Ringkasan
Rumah Java javaTutorial Interface Native Java (JNI) dijelaskan dengan contoh

Interface Native Java (JNI) dijelaskan dengan contoh

Jul 28, 2025 am 12:20 AM
java jni

JNI membenarkan kod Java untuk berinteraksi dengan kod tempatan yang ditulis dalam C/C dan bahasa lain, dan melaksanakannya sebagai perpustakaan yang dikongsi dengan mengisytiharkan kaedah asli, menghasilkan fail header, menulis dan menyusun C sebagai perpustakaan bersama, memuatkan perpustakaan dan menjalankan program untuk mencapai panggilan; 2. Data ditukar antara Java dan jenis tempatan melalui fungsi JNI, seperti JSTRING dan CHAR*; 3. Kod tempatan boleh memanggil semula kaedah Java, dan anda perlu mendapatkan rujukan kelas, ID kaedah dan menggunakan fungsi seperti CallVoidMethod; 4. Perhatikan spesifikasi penamaan, pemeriksaan pengecualian, pengurusan memori, keselamatan benang dan prestasi overhead apabila menggunakannya; 5. Ia sesuai untuk mengakses sumber sistem, menggunakan semula perpustakaan asli atau meningkatkan prestasi, tetapi harus dielakkan apabila Java tulen dapat menyelesaikan atau menekankan kebolehpercayaan; JNI adalah alat yang kuat tetapi berhati -hati, dan aplikasi yang betul dapat mengembangkan keupayaan Java dengan ketara.

Interface Native Java (JNI) dijelaskan dengan contoh

Antara Muka Native Java (JNI) membolehkan kod Java berjalan dalam mesin maya Java (JVM) untuk berinteraksi dengan aplikasi asli dan perpustakaan yang ditulis dalam bahasa lain seperti C, C, atau pemasangan. Ini berguna apabila anda perlu mengakses sumber peringkat sistem, memanfaatkan kod asli yang sedia ada, atau meningkatkan prestasi untuk tugas-tugas yang kuat.

Interface Native Java (JNI) dijelaskan dengan contoh

Walaupun Java direka untuk menjadi platform bebas, JNI memperkenalkan kebergantungan khusus platform-tetapi ia memberi anda kawalan tahap rendah yang kuat apabila diperlukan.

Mari kita pecahkan bagaimana JNI berfungsi, langkah demi langkah, dengan contoh praktikal.

Interface Native Java (JNI) dijelaskan dengan contoh

? Bagaimana JNI Berfungsi: Gambar Besar

JNI bertindak sebagai jambatan antara Java dan kod asli:

  1. Java memanggil kaedah asli yang diisytiharkan dengan kata kunci native .
  2. JVM memuatkan perpustakaan yang dikongsi ( .dll pada Windows, .so on linux, .dylib on macOS).
  3. Kod asli melaksanakan kaedah tersebut , biasanya dalam C/C.
  4. Data ditukar antara Java dan jenis asli menggunakan fungsi JNI.
  5. Secara pilihan, kod asli boleh memanggil kembali ke kaedah Java .

?? Gunakan JNI dengan berhati -hati - ia memintas ciri keselamatan JVM seperti pengumpulan sampah dan pemeriksaan keselamatan.

Interface Native Java (JNI) dijelaskan dengan contoh

? Contoh langkah demi langkah: Memanggil C dari Java

Kami akan membuat program mudah di mana Java memanggil fungsi C yang mengembalikan rentetan.

1. Tulis kelas Java

 // helloworld.java
kelas awam Helloworld {
    // mengisytiharkan kaedah asli
    rentetan asli awam berkataHello ();

    // memuatkan perpustakaan asli
    statik {
        System.LoadLibrary ("Hello"); // beban libhello.so (linux), hello.dll (windows), atau libhello.dylib (macOS)
    }

    public static void main (string [] args) {
        HelloWorld HW = new HelloWorld ();
        System.out.println (hw.sayhello ());
    }
}

Menyusunnya:

 Javac Helloworld.java

Ini menghasilkan HelloWorld.class .


2. Menjana fail header menggunakan javah (ditutup) atau javac -h

Sejak JDK 8, javah ditahan. Gunakan:

 Javac -H. Helloworld.java

Ini menghasilkan fail header: HelloWorld.h , yang kelihatan seperti:

 / * Jangan edit fail ini - ia adalah mesin yang dihasilkan */
#include <jni.h>
/ * Header untuk kelas helloworld */

#ifndef _included_helloworld
#define _included_helloworld
#ifdef __cplusplus
Extern "C" {
#endif

/*
 * Kelas: Helloworld
 * Kaedah: Sayhello
 * Tandatangan: () ljava/lang/string;
 */
Jniexport jstring jnicall java_helloworld_sayhello
  (Jnienv *, pekerjaan);

#ifdef __cplusplus
}
#endif
#endif

Catatan:

  • Java_HelloWorld_sayHello adalah konvensyen penamaan yang diperlukan.
  • JNIEnv* adalah penunjuk antara muka untuk mengakses fungsi JNI.
  • jobject merujuk kepada contoh objek HelloWorld .

3. Melaksanakan kaedah asli dalam c

Buat HelloWorld.c :

 #include <jni.h>
#termasuk "helloworld.h"
#include <string.h>

Jniexport jstring jnicall java_helloworld_sayhello
  (Jnienv *env, pekerjaan obj) {
    kembali (*env)-> newstringutf (env, "hello dari c melalui jni!");
}

Di sini:

  • Kami menggunakan (*env)->NewStringUTF() untuk menukar rentetan c ( char* ) ke jstring .
  • Semua fungsi JNI diakses melalui penunjuk JNIEnv .

4. Menyusun kod C ke dalam perpustakaan bersama

Pada Linux/MacOS:
 gcc -fpic -i "$ {java_home}/termasuk" -i "$ {java_home}/termasuk/linux" \
    -Shared -o libhello.so helloworld.c

Ganti /linux dengan /darwin pada macOS.

Pada Windows (menggunakan Mingw atau MSVC):
 gcc -i "%java_home%\ include" -i "%java_home%\ include \ win32" 
    -shared -o hello.dll helloworld.c

Pastikan output sepadan dengan System.loadLibrary() yang diharapkan:

  • Linux: libhello.so
  • Windows: hello.dll
  • MacOS: libhello.dylib

5. Jalankan program

Pastikan Perpustakaan Dikongsi berada di Laluan Perpustakaan:

 java -djava.library.path =. Helloworld

Output:

 Helo dari C melalui JNI!

? Kejayaan! Java memanggil fungsi C anda.


? Lulus dan mengembalikan jenis data

JNI menyokong pelbagai penukaran jenis data.

Jenis Java Jenis asli (c/c) JNI typedef
Boolean char unsigned Jboolean
byte ditandatangani char Jbyte
int int jint
panjang panjang lama jlong
ganda ganda JDouble
Rentetan char* (diubahsuai UTF-8) jstring
Objek [] JobjectArray pelbagai rujukan

Contoh: Tambahkan dua bilangan bulat dalam c

Java:

 kelas awam Mathlib {
    Int Native Int ADM (int a, int b);
    statik {
        System.LoadLibrary ("matematik");
    }
    public static void main (string [] args) {
        Mathlib Ml = baru Mathlib ();
        System.out.println ("5 7 =" ml.add (5, 7));
    }
}

C Pelaksanaan ( MathLib.c ):

 #include <jni.h>
#termasuk "mathlib.h"

Jniexport jint jnicall java_mathlib_add
  (Jnienv *env, Job Obj, Jint A, Jint B) {
    kembali AB;
}

Langkah penyusunan yang sama dikenakan.


? Mengakses bidang dan kaedah Java dari kod asli

Kod asli juga boleh memanggil kembali ke Java .

Contoh: Panggil kaedah Java dari C.

Java:

 callbackexample kelas awam {
    nilai int swasta = 42;

    public void printValue () {
        System.out.println ("Nilai dari Java:" Nilai);
    }

    public native void callprintValue ();

    statik {
        System.LoadLibrary ("Callback");
    }

    public static void main (string [] args) {
        callBackExample baru (). CallPrintValue ();
    }
}

Pelaksanaan C:

 #include <jni.h>
#termasuk "callbackexample.h"

Jniexport void jnicall java_callbackexample_callprintValue
  (Jnienv *env, pekerjaan obj) {

    // Dapatkan kelas
    JClass cls = (*env)-> getObjectClass (env, obj);

    // Cari id kaedah
    jMethodid mid = (*env)-> getMethodid (env, cls, "printValue", "() v");
    jika (pertengahan == null) kembali; // Kaedah tidak dijumpai

    // panggil kaedah java
    (*env)-> callVoidMethod (env, obj, mid);
}

Tandatangan "()V" bermaksud: tiada hujah, mengembalikan kekosongan.

Kembali semula dan jalankan → output:

 Nilai dari Java: 42

Anda baru sahaja membuat C memanggil kaedah Java!


?? Perangkap biasa & amalan terbaik

  • Konvensyen Penamaan : Nama kaedah asli mesti mengikuti Java_PackageName_ClassName_MethodName .
  • Pengendalian Pengecualian : Sentiasa periksa pengecualian selepas panggilan JNI kritikal menggunakan (*env)->ExceptionCheck() atau ExceptionOccurred() .
  • Pengurusan memori : Rujukan tempatan yang dibuat dalam kod asli dibersihkan secara automatik kecuali disematkan. Elakkan kebocoran ingatan.
  • Keselamatan Thread : JNIEnv adalah benang-tempatan. Jangan kongsi di seluruh benang.
  • Prestasi : Menyeberangi sempadan JNI mempunyai overhead. Meminimumkan panggilan kerap.
  • Kemudahalihan : Perpustakaan asli adalah OS/Khusus Senibina. Anda mungkin memerlukan pelbagai binaan.

? Bilakah anda harus menggunakan JNI?

Gunakan JNI bila:

  • Interfacing dengan perkakasan atau OS API (misalnya, pemandu peranti).
  • Menggunakan semula warisan C/C Legacy.
  • Bahagian prestasi kritikal (contohnya, matematik, pemprosesan imej).
  • Mengintegrasikan dengan perpustakaan asli (OpenCV, OpenSSL, dan lain -lain).

Elakkan JNI bila:

  • Penyelesaian Java Pure wujud.
  • Kemudahalihan adalah kunci.
  • Kesederhanaan dan penyelenggaraan lebih penting daripada kelajuan.

Ringkasan

JNI membolehkan integrasi yang kuat antara Java dan kod asli. Dengan hanya beberapa langkah - mengisytiharkan kaedah native , menjana tajuk, menulis kod C, menyusun kepada perpustakaan yang dikongsi, dan memuatkannya - anda boleh melanjutkan keupayaan Java di luar JVM.

Ia bukan sesuatu yang anda gunakan setiap hari, tetapi apabila anda memerlukannya, ia sangat diperlukan.

Pada asasnya, JNI membuka pintu - hanya berhati -hati dengan apa yang anda bawa.

Atas ialah kandungan terperinci Interface Native Java (JNI) dijelaskan dengan contoh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Membina API Restful di Jawa dengan Jakarta EE Membina API Restful di Jawa dengan Jakarta EE Jul 30, 2025 am 03:05 AM

SetupaMaven/gradleprojectwithjax-rsdependencyiSejersey; 2.createarescresourceUsingAnnotationssuchas@pathand@get; 3.configuretheapplicationviaapplicationsubclassorweb.xml;

Panduan Pemaju untuk Maven untuk Pengurusan Projek Java Panduan Pemaju untuk Maven untuk Pengurusan Projek Java Jul 30, 2025 am 02:41 AM

Maven adalah alat standard untuk pengurusan dan pembinaan projek Java. Jawapannya terletak pada hakikat bahawa ia menggunakan pom.xml untuk menyeragamkan struktur projek, pengurusan pergantungan, automasi kitaran hayat pembinaan dan sambungan pemalam; 1. Gunakan pom.xml untuk menentukan kumpulan, artifactid, versi dan kebergantungan; 2. Perintah teras utama seperti mvnclean, penyusun, ujian, pakej, memasang dan menggunakan; 3. Gunakan DependencyManagement dan Pengecualian untuk Menguruskan Versi Ketergantungan dan Konflik; 4. Mengatur aplikasi besar melalui struktur projek multi-modul dan diuruskan secara seragam oleh POM induk; 5.

Bagaimana cara menggunakan java messagedigest untuk hashing (MD5, SHA-256)? Bagaimana cara menggunakan java messagedigest untuk hashing (MD5, SHA-256)? Jul 30, 2025 am 02:58 AM

Untuk menjana nilai hash menggunakan Java, ia boleh dilaksanakan melalui kelas MessageDigest. 1. Dapatkan contoh algoritma yang ditentukan, seperti MD5 atau SHA-256; 2. Panggil kaedah .Update () untuk lulus dalam data untuk disulitkan; 3. Panggil kaedah .digest () untuk mendapatkan pelbagai hash byte; 4. Tukar array byte ke dalam rentetan heksadesimal untuk membaca; Untuk input seperti fail besar, baca dalam ketulan dan panggilan .Update () beberapa kali; Adalah disyorkan untuk menggunakan SHA-256 dan bukannya MD5 atau SHA-1 untuk memastikan keselamatan.

CSS Dark Mode Togol Contoh CSS Dark Mode Togol Contoh Jul 30, 2025 am 05:28 AM

Pertama, gunakan JavaScript untuk mendapatkan pilihan sistem pengguna dan tetapan tema yang disimpan di dalam negara, dan memulakan tema halaman; 1. Struktur HTML mengandungi butang untuk mencetuskan Topik Switching; 2. CSS menggunakan: Root untuk menentukan pembolehubah tema yang cerah, kelas mod-mode mentakrifkan pembolehubah tema gelap, dan menggunakan pembolehubah ini melalui VAR (); 3. JavaScript mengesan lebih suka skema-skema dan membaca LocalStorage untuk menentukan tema awal; 4. Tukar kelas mod gelap pada elemen HTML apabila mengklik butang, dan menjimatkan keadaan semasa ke LocalStorage; 5. Semua perubahan warna disertakan dengan animasi peralihan 0.3 saat untuk meningkatkan pengguna

Contoh Menu Dropdown CSS Contoh Menu Dropdown CSS Jul 30, 2025 am 05:36 AM

Ya, menu drop-down CSS biasa boleh dilaksanakan melalui HTML dan CSS tulen tanpa JavaScript. 1. Gunakan UL dan Li bersarang untuk membina struktur menu; 2. Gunakan: Hover pseudo-Class untuk mengawal paparan dan menyembunyikan kandungan tarik-turun; 3. Tetapkan Kedudukan: Relatif untuk Ibu Bapa Li, dan submenu diletakkan menggunakan kedudukan: mutlak; 4. Submenu mungkir untuk memaparkan: Tiada, yang menjadi paparan: blok apabila melayang; 5. Multi-level pull-down boleh dicapai melalui bersarang, digabungkan dengan peralihan, dan menambah animasi pudar, dan disesuaikan dengan terminal mudah alih dengan pertanyaan media. Penyelesaian keseluruhannya mudah dan tidak memerlukan sokongan JavaScript, yang sesuai untuk besar

VSCODE SETTINGS.JSON Lokasi VSCODE SETTINGS.JSON Lokasi Aug 01, 2025 am 06:12 AM

Fail Tetapan.JSON terletak di laluan peringkat pengguna atau ruang kerja dan digunakan untuk menyesuaikan tetapan vscode. 1. Laluan peringkat pengguna: Windows adalah C: \ Users \\ AppData \ Roaming \ code \ user \ settings.json, macOS adalah /users//library/applicationsupport/code/user/settings.json, linux adalah/ 2. Laluan Tahap Ruang Kerja: .VSCODE/Tetapan dalam Direktori Root Projek

Contoh Rentetan Tarikh Python Python Contoh Rentetan Tarikh Python Python Jul 30, 2025 am 03:32 AM

Gunakan DateTime.StrpTime () untuk menukar rentetan tarikh ke dalam objek DateTime. 1. Penggunaan Asas: Parse "2023-10-05" sebagai objek DateTime melalui "%y-%m-%d"; 2. Menyokong pelbagai format seperti "%m/%d/%y" untuk menghuraikan tarikh Amerika, "%d/%m/%y" untuk menghuraikan tarikh British, "%b%d,%y%i:%m%p" untuk menghuraikan masa dengan am/pm; 3. Gunakan dateUtil.parser.parse () untuk secara automatik menyimpulkan format yang tidak diketahui; 4. Gunakan .D

Teks Teks Sublime Tutup HTML Teks Teks Sublime Tutup HTML Jul 30, 2025 am 02:41 AM

Memasang plug-in Emmet boleh mencapai penutupan automatik pintar tag dan sintaks singkatan sokongan; 2. Dayakan "AUTO_MATCH_ENABLED": benar untuk membolehkan SUBLIME untuk melengkapkan tag mudah secara automatik; 3. Gunakan alt. (Menang) atau peralihan CTRL. (Mac) Kekunci pintasan untuk menutup secara manual tag semasa - disyorkan untuk menggunakan Emmet dalam kehidupan seharian. Dua kaedah yang terakhir boleh digabungkan, yang cekap dan mudah untuk ditetapkan.

See all articles