A JNI ( Java Native Interface ) é uma biblioteca de software para interface integrada nativamente JDK Java, que permite que o código Java executado dentro da JVM para chamar e ser chamado por aplicativos nativos (ou seja, programas específicos para o hardware e sistema operacional da plataforma em questão), ou com bibliotecas de software baseadas em outras linguagens ( C , C ++ , assembler , etc.).
Aqui estão alguns exemplos de uso de JNI:
O coletor de lixo não funciona para funções JNI , portanto o programador deve ser rigoroso em sua programação.
A interface JNI é menos complexa com uma linguagem que já usa objetos (como C ++), ao passo que, em contraste, linguagens como C não têm conceito de objeto e tornam a programação mais difícil.
Quando a JVM chama uma função JNI, ela passa dois ponteiros Java como parâmetros , o primeiro para um objeto do tipo JNIEnv , o outro para qualquer objeto.
Aqui está um exemplo típico de uma chamada de função JNI.
JNIEXPORT void JNICALL Java_ClassName_MethodName (JNIEnv *env, jobject obj) { //Implement Native Method Here }O ponteiro envé uma estrutura que contém a interface para a JVM. Inclui todas as funções necessárias para interagir com a JVM e trabalhar com objetos Java.
Exemplos de função JNI: tabelas de conversão Java nativas pinturas, string Java String nativos caracteres, instanciar objetos, lidar com exceções .
A tabela a seguir fornece os principais exemplos de correspondência entre os tipos Java e os tipos C nativos.
Tipo Java | Tipo nativo C | Descrição | Assinatura do tipo |
---|---|---|---|
boleano | caracter não identifcado | booleano (falso = 0) | Z |
byte | char assinado | Inteiro assinado de 8 bits | B |
tanque | curto sem sinal | Inteiro não assinado de 16 bits | VS |
shorts | shorts | Inteiro assinado de 16 bits | S |
int | int | Inteiro assinado de 32 bits | eu |
longo |
long long ou __int64 |
Inteiro assinado de 64 bits | J |
flutuador | flutuador | Número de ponto flutuante de 32 bits | F |
Duplo | Duplo | Número de ponto flutuante de 64 bits | D |