Introducción a la palabra clave nativa:
La palabra clave nativa actúa como un enlace entre el lenguaje JAVA y un trozo de código o librería escrito en diferentes lenguajes excepto JAVA que puede depender de la máquina en la que se esté operando. Si la palabra clave nativa se aplica a un método, entonces eso significa que el método se implementará utilizando código nativo escrito en algún otro lenguaje (como C o C++) a través de JNI (interfaz nativa de JAVA).
Sintaxis:
La sintaxis del código nativo es la misma que la definición de la función normal con la palabra clave «nativo» añadido en el inicio de la función.
Por ejemplo:
Public class testing
{public native String testMethod (String parameter);}
Aquí public es un modificador de acceso. Debe ser público para que otro archivo pueda utilizarlo. String es el tipo de datos de retorno de la función. Puede ser un entero, un carácter o un booleano dependiendo de la palabra clave. El parámetro pasado a esta función es de tipo de datos string también. Todo debe mantenerse bajo la clase.
Después de la declaración de la función llamamos a esta función a través del objeto creado y la biblioteca cargada.
public static void main(String args)
{
System.loadLibrary(«testing»);
testing testingnew = new testing();
String output = testingnew.stringMethod(«NATIVE»);
}
Se debe cargar primero la biblioteca definida anteriormente y luego se crea su objeto. Con la ayuda de este objeto , la función nativa es llamada.
¿Cómo funciona la palabra clave nativa?
Debe haber dos archivos. Uno que contenga código JAVA mientras que el otro debe tener código heredado C/C++. El código Java se utilizará para llamar al código heredado. Este código heredado interactuará con el hardware y devolverá la salida esperada.
Cuando el código heredado interactúa con el hardware entonces no seguirá las directrices establecidas por JAVA. Este código hará el procesamiento deseado para obtener la salida y pasar los resultados a JNI. La interfaz nativa de Java comprobará entonces en su directorio que contiene todas las reglas relativas al código nativo (Esto viene en el archivo llamado javah.exe en el SDK). JNI está diseñado como parte del conjunto de herramientas de Java. Después de este procesamiento el JAVA publicará las salidas en el propio lenguaje JAVA. Cuando estamos creando el programa en JAVA entonces debemos asegurarnos de que hay una variable / enlace de flujo de datos entre el archivo JAVA y el archivo de legado para que haya flujo de datos sin problemas entre ambos.
Pasos que explican cómo hacer uso de palabras clave nativas se dan a continuación:
- Escribir el código JAVA que contiene método nativo, biblioteca compartida cargado y guardarlo usando «nombre de archivo.JAVA».
- Compilar el código JAVA y convertir el código a bytecode.
- Crear el archivo de cabecera C/C++ que contiene la firma de la función nativa que debe ser llamada.
- Escribir el código C/C++ que tiene la implementación del método nativo.
- Ejecutar el archivo ejecutable JAVA para ver los resultados.
Ejemplos para mostrar la implementación de la palabra clave nativa:
Deberíamos escribir código en Eclipse y ejecutar el código para crear una librería usando la cual luego se implementará el código C.
Código: paquete com.slackerOne;
public class JPP {
public static native void pAccess();
public static native int pRead();
public static native void pWrite(int port, int output);
static{
System.loadLibrary(«JPPlibs»);
}
public void jAccess(){
JPP.pAccess();
}
public int jRead(){
return JPP.pRead();
}
public void jWrite(int port, int output){
JPP.pWrite(port, output);
}
}
Después de guardar este código en la nueva «clase» del proyecto java. Tenemos que configurar el entorno de ejecución para generar el archivo de cabecera.
![](https://miro.medium.com/max/60/1*yaLOSXveYEmKvNx89oAyuw.png?q=20)
Cuando ejecutemos esto deberíamos obtener una biblioteca generada.
Salida:
Aquí creamos el archivo de cabecera del código java que actuará como enlace entre el código nativo y el lenguaje java.
![](https://miro.medium.com/max/60/1*NMVw1c0VLGOm2dxSp-ih8g.png?q=20)
Ventajas:
- Proporciona una ventaja añadida a JAVA para interactuar con el código escrito en otros lenguajes y reducir el trabajo de tener el mismo código escrito en JAVA, reduciendo así la redundancia de código.
- Mejora el rendimiento general del código. Como el código escrito en otro lenguaje puede ser más rápido cuando trabaja con el lenguaje de la máquina en comparación con JAVA. Podemos entonces utilizar el programa JAVA para llamar a este código.
- Usando este enfoque, podemos dar directamente las llamadas al sistema. Reduciendo la probabilidad de interferencia externa y mejorando la velocidad de ejecución del código.
- Puedes llamar dinámicamente a una librería precargada (escrita en cualquier lenguaje que no sea JAVA) utilizando un código de conducción arbitrario escrito en JAVA y seguir obteniendo respuesta en JAVA.
- Hace accesible para JAVA alcanzar los recursos de hardware que están disponibles para ser utilizados sólo por otros lenguajes.
- En caso de tener un código dependiente de la plataforma ya construido para su aplicación y cuyas características no son compatibles a través de JAVA en ese caso podemos tener código nativo y enlazar este código nativo a JAVA a través de la palabra clave nativa.
Reglas:
- La palabra clave nativa debe utilizarse antes del nombre del método.
- La declaración del método nativo no tiene cuerpo y debe terminar con dos puntos y medio ya que estos métodos no están definidos en JAVA pero están presentes en el lenguaje C/C++.
- Los métodos nativos no pueden declararse como método abstracto.
- Dado que no hay seguridad de que el código anterior esté escrito de acuerdo con el estándar IEEE 754 (El estándar IEEE para la aritmética de punto flotante es un estándar técnico para la aritmética de punto flotante establecido en 1985 por el Instituto de Ingenieros Eléctricos y Electrónicos), no podemos declarar estos métodos nativos como strictftp.
- La especificación Java Native Interface (JNI) está diseñada por JAVA para definir las reglas y declaraciones para implementar métodos nativos, como la conversión de tipos de datos entre Java y el código nativo.
Conclusión:
La palabra clave nativa es la que sirve de puente entre los lenguajes nativos y JAVA. Esto puede ser utilizado como un enlace crítico si la interacción de nuestro software con el hardware es más para obtener el código eficiente utilizando el código preexistente. Hace que el trabajo de implementación sea menor en comparación con el diseño de un nuevo código de aplicación desde el principio siempre que se pueda evitar.