1. Введение в JNI
JNI - это английская аббревиатура местного интерфейса Java, что означает локальный интерфейс Java.
Источник проблемы: поскольку трудно реализовать базовое применение написания Java, Java трудно справиться в некоторых частях с очень высокими требованиями в реальном времени (пока нет областей с высокими требованиями в реальном времени, и такие темы, как в режиме реального времени, необходимо расследовать).
Решение: Java использует JNI для вызова существующих локальных библиотек (C/C ++ для разработки любых системных программ и библиотек классов), которые значительно гибко разрабатывают Java.
2. JNI быстрое обучение
2.1 Вопрос:
Напишите кусок кода, используя JNI, реализуйте функцию string_java_test_helloworld (jnienv *env, jclass cls, j_string), реализуйте добавление Hello перед строкой j_str ("world") и возврата.
2.2 Процесс решения проблем:
I. Напишите Test.java Class:
открытый тест класса {// нативный интерфейс публичная нативная строка Helloworld (String Text); public static void main (string [] args) {// загружать динамическую библиотеку System.loadLibrary ("test2"); Тест ts = new Test (); String text = ts.helloworld ("world"); System.out.println (текст); }}Замечание:
1. Загрузить динамическую библиотеку классов: system.loadlibrary ("test2"); [Тот, который загружен в Windows, является test2.dll, а тот, который загружается в Linux, является test2.so]
II Compile test.java файл
Введите CMD, чтобы ввести команду> Javac Test.java
Iii. Генерировать файл test.h
Введите команду ввода CMD> тест на Javah
Содержимое файла test.h следующее:
/ * Не редактируйте этот файл - он сгенерирован на машине */#include <jni.h>/ * Заголовок для теста класса */#ifndef _included_test#define _included_test#ifdef __cplusplusextern "c" {#endif/ * class: test * method: helloWorld *. (Ljava/lang/string;) ljava/lang/string; */Jniexport jstring jnicall java_test_helloworld (jnienv *, jobject, jstring);#ifdef __cplusplus}#endif#endifЗамечание:
1. Объявление функции, фиксированный формат: jniexport; Возвращение типа: JString; Jni Call: Jnicall; Java_full class name_method name: java_test_helloworld;
2. Параметры функции: вызовите jni.h к инкапсулированному указатель функции: Jnienv; Сам класс Java: Jobject, Java -файл. Переданные параметры: JString.
IV Write c language file test2.c для реализации функции библиотеки динамических ссылок вызова тестового класса:
#include "test.h" #include <string.h> jniexport jstring jnicall java_test_helloworld (jnienv*env, job obj, jstring string) {const char*str = (*env)-> getStringUtfchars (env, string, 0); Чар -крышка [128]; cap [0] = 'H'; CAP [1] = 'E'; cap [2] = 'l'; cap [3] = 'l'; cap [4] = 'o'; strcat (cap, str); (*env)-> releasestringUtfchars (env, string, 0); return (*env)-> newstringutf (env, cap); }Замечание:
1. Поскольку сама Java использует двойные символы, сам язык C является однобайтовым символом, поэтому вам нужно использовать (*env)-> getStringUtfchars () для преобразования строки между Java и C;
2. getstringutfchars () и Newstringutf (). Первый - это формат кодирования, преобразованный из UTF8 в C, а второе - вернуть строку UTF8 на основе строки C;
3. releaseStringUtfchars () используется для освобождения объектов. В Java есть виртуальные машины для сбора мусора, но на языке C эти объекты должны быть переработаны вручную, иначе могут возникнуть утечки памяти.
V. Скомпилируйте и запустите
Компиляция:
Введите команду ввода CMD> GCC -I "D:/Program Files/java/jdk1.8.0_45/include" -i "d:/program files/java/jdk1.8.0_45/include/win32" -share test2.c -o test2.dll
бегать:
Введите CMD, чтобы ввести команду> тест на Java
Результаты работы следующие:
Привет, мир
3. Резюме:
Шаг 1: Напишите класс Java (test.java) с нативными методами и используйте инструмент Javac для компиляции класса Java (генерировать test.class);
Шаг 2: Используйте Javah для генерации файла заголовка (test.h), соответствующего собственному методу;
Шаг 3: Используйте C/C ++ для реализации соответствующего файла заголовка (test2.c) и составьте его в библиотеку динамических ссылок (test2.so).
Работая среда этой статьи: 64-битная операционная система Windows, JDK версия 1.8, Mingw64 (GCC).
Вышеуказанный учебник Java JNI Quick Envingure (рекомендуется) - это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.