1. JNI 소개
JNI는 Java Native Interface의 영어 약어로 Java Local Interface를 의미합니다.
문제의 출처 : Java Writing의 기본 적용을 구현하기가 어렵 기 때문에 Java는 실시간 요구 사항이 매우 높은 일부 부품에서는 처리하기가 어렵습니다 (아직 실시간 요구 사항이 높은 영역은 없으며 실시간 조사와 같은 주제를 조사해야합니다).
솔루션 : Java는 JNI를 사용하여 기존 로컬 라이브러리 (C/C ++)를 호출하여 시스템 관련 프로그램 및 클래스 라이브러리를 개발 함)는 Java를 크게 개발합니다.
2. JNI 빠른 학습 자습서
2.1 질문 :
JNI를 사용하여 코드를 작성하고 String_java_test_hellowld (jnienv *env, jclass cls, jstring j_str) 함수를 구현하고 String j_str ( "World") 앞에서 Hello의 추가를 구현하고 return을 구현하십시오.
2.2 문제 해결 프로세스 :
I. Test.java 클래스 : 작성 :
공개 클래스 테스트 {// 기본 인터페이스 공개 기본 문자열 HelloWorld (문자열 텍스트); public static void main (String [] args) {// 동적 라이브러리 시스템을로드합니다 .Loadlibrary ( "test2"); ts = new test (); 문자열 text = ts.HellowORLD ( "World"); System.out.println (텍스트); }}주목:
1. 동적 클래스 라이브러리로드 : System.LoadLibrary ( "Test2"); [Windows에로드 된 것은 test2.dll이고 Linux에로드 된 것은 test2입니다.
II. compile test.java 파일
CMD를 입력하여 명령> javac test.java를 입력하십시오
III. test.h 파일을 생성합니다
CMD 입력 명령> javah 테스트를 입력하십시오
test.h 파일의 내용은 다음과 같습니다.
/ *이 파일을 편집하지 마십시오 - 기계가 생성됩니다 */#클래스 테스트를위한 <jni.h>/ * 헤더 포함 */#ifndef _included_test#define _included_test#ifdef __cplusplusextern "c"{#endif/ * * 클래스 : helloworld * signature : (ljava/lang/string;) ljava/lang/string; */jniexport JString Jnicall Java_test_hellowld (jnienv *, jobject, jstring);#ifdef __cplusplus}#endif#endif주목:
1. 함수 선언, 고정 형식 : jniexport; 반환 유형 : Jstring; JNI 전화 : Jnicall; java_full 클래스 이름 _method 이름 : java_test_helloworld;
2. 함수 매개 변수 : 캡슐화 된 기능 포인터를 캡슐화하려면 jni.h를 호출합니다 : jnienv; Java 클래스 자체 : Jobject, Java 파일 전달 된 매개 변수 : jstring.
IV. 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); Char Cap [128]; CAP [0] = 'H'; 캡 [1] = 'e'; 캡 [2] = 'l'; 캡 [3] = 'l'; CAP [4] = 'O'; strcat (Cap, str); (*env)-> reengestringutfchars (Env, String, 0); return (*env)-> Newstringutf (Env, Cap); }주목:
1. Java 자체는 이중 바이트 문자를 사용하기 때문에 C 언어 자체는 단일 바이트 문자이므로 Java와 C 사이의 문자열을 변환하려면 (*Env)-> getStringutfchars ()를 사용해야합니다.
2. getStringutfchars () 및 NewStringutf (). 첫 번째는 UTF8에서 C로 변환 된 인코딩 형식이고, 두 번째는 C의 문자열에 따라 UTF8 문자열을 반환하는 것입니다.
3. Releasestringutfchars ()는 객체를 해제하는 데 사용됩니다. 쓰레기 수집을위한 Java에는 가상 기계가 있지만 C 언어로서 이러한 객체는 수동으로 재활용되어야합니다. 그렇지 않으면 메모리 누출이 발생할 수 있습니다.
V. 컴파일 및 실행
편집:
CMD 입력 명령을 입력하십시오> GCC -I "D :/Program Files/Java/JDK1.8.0_45/포함"-i "D :/Program Files/Java/JDK1.8.0_45/Include/Win32" -샤어 test2.c -o test2.dll
달리다:
CMD를 입력하여 명령> Java 테스트를 입력하십시오
작업 결과는 다음과 같습니다.
Helloworld
3. 요약 :
1 단계 : 기본 메소드가있는 Java 클래스 (Test.java)를 작성하고 Javac 도구를 사용하여 Java 클래스 (Generate Test.Class)를 컴파일합니다.
2 단계 : Javah를 사용하여 기본 방법에 해당하는 헤더 파일 (test.h)을 생성합니다.
3 단계 : C/C ++를 사용하여 해당 헤더 파일 (test2.c)을 구현하고 동적 링크 라이브러리 (test2.s)로 컴파일합니다.
이 기사의 실행 환경 : Windows 64 비트 운영 체제, JDK 버전 1.8, Mingw64 (GCC).
위의 Java JNI 빠른 소개 튜토리얼 (권장)은 내가 공유하는 모든 콘텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.