Utilizar el Java Native Interface (JNI)

En est� p�gina aprenderemos como referenciar los tipos Java en nuestro m�todo nativo. Se necesitar� referenciar a los tipos Java cuando queramos.

  • Acceder a los argumentos pasados a un m�todo nativo desde una aplicaci�n Java.
  • Crear nuevos objetos Java en nuestro m�todo nativo.
  • Hacer que nuestro m�todo nativo devuelva resultados a su llamador.

.�Tipos Primitivos de Java

Nuestros m�todo nativo puede acceder directamente a los tipos primitivos de Java, como booleans, integers, floats, etc., que sean pasados desde programas escritos en lenguaje Java. Por ejemplo, el tipo boolean de Java se convierte en el tipo jboolean en el lenguaje nativo (representado como 8 bits sin signo), mientras que el tipo float de Java se convierte en el tipo jfloat en el lenguaje nativo (representado por 32 bits). La siguiente tabla describe las conversiones entre los tipos primitivos de Java y los tipos nativos.

.�Tipos Primitivos y Nativos Equivalentes

Tipo Java Tipo Nativo Tama�o en bits
boolean jboolean 8, unsigned
byte jbyte 8
char jchar 16, unsigned
short jshort 16
int jint 32
long jlong 64
float jfloat 32
double jdouble 64
void void n/a

.�Tipos de Objetos Java

Los Objetos Java se pasan por referencia. Todas las referencias a objetos Java tienen el tipo jobject. Por conveniencia y para reducir los errores de programaci�n, el JNI implementa un conjunto de tipos que conceptualmente son todos "Subtipos" de jobject, de la siguiente forma.

  • jobject representa todos los objetos Java.
    • jclass representa objetos del tipo (java.lang.Class).
    • jstring representa Strings Java (java.lang.String).
    • jarray representa arrays Java.
      • jobjectArray representa arrays de objetos.
      • jbooleanArray representa arrays booleanos.
      • jbyteArray representa arrays de bytes.
      • jcharArray representa arrays de char.
      • jshortArray representa arrays de short.
      • jintArray representa arrays de int.
      • jlongArray representa arrays de long.
      • jfloatArray representa arrays de float.
      • jdoubleArray representa arrays de double.
    • jthrowable representa excepciones Java (java.lang.Throwable).

En nuestro ejemplo Prompt.java, el m�todo nativo getLine.

private native String getLine(String prompt);

toma un String Java como argumento y devuelve un String Java. Su implementaci�n nativa correspondiente tiene el tipo jstring tanto para el argumento como para el valor de retorno.

JNIEXPORT jstring JNICALL 
Java_Prompt_getLine(JNIEnv *, jobject, jstring);

Como se mencion� anteriormente, jstring corresponde al tipo String de Java. Observa que el segundo argumento de Java_Prompt_getLine, que es una referencia al propio objeto, tiene el tipo jobject.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO