1. Introdução ao JNI
JNI é a abreviação inglesa da interface nativa de Java, que significa interface local Java.
Fonte do problema: como é difícil implementar a aplicação subjacente da redação de Java, o Java é difícil de lidar em algumas partes com requisitos muito altos em tempo real (ainda não há áreas com requisitos em tempo real e tópicos como a necessidade em tempo real).
Solução: O Java usa o JNI para chamar as bibliotecas locais existentes (C/C ++ para desenvolver quaisquer programas relacionados ao sistema e bibliotecas de classes), que desenvolvem bastante flexibilidade Java.
2. JNI Tutorial de aprendizado rápido
2.1 Pergunta:
Escreva um pedaço de código usando JNI, implemente a função String_Java_Test_Helloworld (Jnienv *Env, Jclass CLS, JString J_STR), implemente a adição de Hello na frente da String J_STR ("World") e retorne.
2.2 Processo de resolução de problemas:
I. Escreva a classe Test.java:
public class Test {// interface nativa public string nativo helloworld (text string); public static void main (string [] args) {// carrega o dinâmico biblioteca System.loadlibrary ("test2"); Teste ts = new test (); Texto de string = ts.helloworld ("mundo"); System.out.println (texto); }}Observação:
1. Carregar biblioteca de classes dinâmicas: System.LoadLibrary ("Test2"); [O que é carregado no Windows é test.dll, e o carregado no Linux é test.
Ii. FILE COMPILAR TEST.JAVA
Digite o CMD para entrar em comando> Javac test.java
Iii. Gerar arquivo test.h
Digite o comando de entrada da CMD> Teste de Javah
O conteúdo do arquivo test.h é o seguinte:
/ * Não edite este arquivo - é gerado pela máquina */#inclua <jni.h>/ * cabeçalho para o teste da classe */#ifndef _included_test#define _included_test#ifdef __cplusplusextern "c"##endif/endif/ * class: test * método: helloworld * (Ljava/lang/string;) ljava/lang/string; */Jniexport jstring jnicall java_test_helloworld (jnienv *, jobject, jstring);#ifdef __cplusplus}#endif#endif
Observação:
1. Declaração da função, formato fixo: jniexport; Tipo de retorno: JString; Chamada JNI: JNICALL; Java_full Classe name_method Nome: java_test_helloworld;
2. Parâmetros de função: ligue para JNI.H para o ponteiro da função encapsulado: jnienv; Classe Java em si: Jobject, Arquivo Java Passado Parâmetros: JString.
4. Escreva o arquivo de idioma c test2.c para implementar a função da classe de teste Chamando a biblioteca de link dinâmica:
#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'; 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); }Observação:
1. Como o próprio Java usa caracteres de dois bytes, a própria linguagem C é de caracteres de byte, então você precisa usar (*Env)-> getStringutfchars () para converter a sequência entre Java e C;
2. GetStringUtfchars () e Newstringutf (). O primeiro é o formato de codificação convertido de UTF8 para C, e o segundo é retornar uma sequência UTF8 com base na sequência de C;
3. ReleasEstringUtfchars () é usado para liberar objetos. Existem máquinas virtuais em Java para coleta de lixo, mas na linguagem C esses objetos devem ser reciclados manualmente, caso contrário, poderão ocorrer vazamentos de memória.
V. Compilar e executar
Compilação:
Digite o comando de entrada da CMD> gcc -i "d:/arquivos de programas/java/jdk1.8.0_45/incluir" -i "d:/programas arquivos/java/jdk1.8.0_45/incluir/win32" -share test2.c test2.dll
correr:
Digite o CMD para inserir o comando> teste Java
Os resultados da operação são os seguintes:
Helloworld
3. Resumo:
Etapa 1: escreva uma classe Java (test.java) com métodos nativos e use a ferramenta JAVAC para compilar a classe Java (gerar test.class);
Etapa 2: use Javah para gerar o arquivo de cabeçalho (test.h) correspondente ao método nativo;
Etapa 3: Use C/C ++ para implementar o arquivo de cabeçalho correspondente (Test2.c) e compile em uma biblioteca de link dinâmica (TEST2.SO).
O ambiente de corrida deste artigo: Sistema operacional Windows de 64 bits, JDK versão 1.8, Mingw64 (GCC).
O tutorial de introdução rápida do Java JNI acima (recomendado) é todo o conteúdo que eu compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.