Você está na página 1de 9

TECNOLOGIA DE SOFTWARE PARA ELECTRONICA II

ESCUELA POLITCNICA DEL EJRCITO


DEPARTAMENTO ELECTICA Y ELECTRONICA

ELECTRONICA Y TELECOMUNICACIONES

TECNOLOGIA DE SOFTWARE PARA ELECTRONICA II

ABRIL DE 2013

TECNOLOGIA DE SOFTWARE PARA ELECTRONICA II INDICE

1.

Objetivos .............................................................................................................................. 3 1.1. 1.2. Objetivo General ......................................................................................................... 3 Objetivo Especfico...................................................................................................... 3

2.

Marco Terico ..................................................................................................................... 3

JAVA NATIVE INTERFACE ............................................................................................................... 3 PROPSITO Y CARACTERSTICAS ............................................................................................... 3 ADVERTENCIAS .......................................................................................................................... 4 CMO FUNCIONA EL JNI ........................................................................................................... 4 3. 4. 5. Programas Realizados en clase .......................................................................................... 6 Conclucionesy Recomendaciones ....................................................................................... 9 Bibliografia ........................................................................... Error! Marcador no definido. http://macprogramadores.org/documentacion/jni.pdf ....................................................... 9 http://es.wikipedia.org/wiki/Java_Native_Interface ............................................................ 9

TECNOLOGIA DE SOFTWARE PARA ELECTRONICA II 1. Objetivos 1.1. Objetivo General Desarrollar un cuaderno digital de toda la materia vista en el Primer Parcial 1.2. Objetivo Especfico Crear un un documento donde se pueda ver lo que se aprendio en el primer parcial en la materia de JAVA2

2. Marco Terico
JAVA NATIVE INTERFACE Java Native Interface (JNI) es un framework de programacin que permite que un programa escrito en Java ejecutado en la mquina virtual java (JVM) pueda interactuar con programas escritos en otros lenguajes como C, C++ y ensamblador. PROPSITO Y CARACTERSTICAS El JNI se usa para escribir mtodos nativos que permitan solventar situaciones en las que una aplicacin no puede ser enteramente escrita en Java, como por ejemplo en el caso de que la biblioteca estndar de clases no proporcione soporte para funcionalidades dependientes de la plataforma. Tambin se usa para modificar programas existentes escritos en algn otro lenguaje, permitindoles ser accesibles desde aplicaciones Java. Muchas de las clases de la API estndar de Java dependen del JNI para proporcionar funcionalidad al desarrollador y al usuario, por ejemplo las funcionalidades de sonido o lectura/escritura de ficheros. El desarrollador debe asegurarse que la API estndar de Java no proporciona una determinada funcionalidad antes de recurrir al JNI, ya que la primera ofrece una implementacin segura e independiente de la plataforma. El framework JNI permite a un mtodo nativo utilizar los objetos Java de la misma forma en que el propio cdigo de Java lo hace. Un mtodo nativo puede crear objetos Java; y examinarlos y utilizarlos para que lleven a cabo su funcin. Un mtodo nativo puede asimismo examinar y utilizar objetos que han sido creados por cdigo de aplicacin escrito en Java. A menudo se denomina a JNI como la "vlvula de escape" para desarrolladores dado que les permite aadir funcionalidades a sus aplicaciones que el API de Java no puede proporcionar. Dado que -como se ha dicho antes- puede ser usado para interactuar con cdigo escrito en otros lenguajes como C++, tambin se usa para operaciones y clculos de alta complejidad temporal, porque el cdigo nativo es por lo general ms rpido que el que se ejecuta en una mquina virtual.

TECNOLOGIA DE SOFTWARE PARA ELECTRONICA II


ADVERTENCIAS JNI no es en absoluto trivial, Se recomienda que sea usado por buenos programadores. En cualquier caso, la posibilidad de comunicar Java con C, C++ o ensamblador, desestima toda limitacin en lo que los programas Java pueden hacer. Es aconsejable tener en cuenta los siguientes puntos cuando se considera usar JNI: 1. JNI no es un API fcil de aprender. 2. Pequeos errores en el uso de JNI pueden desestabilizar completamente la mquina virtual Java, de formas muy difciles de reproducir y subsanar. 3. Solo las aplicaciones y applets firmados pueden invocar el JNI. 4. Una aplicacin que recurre a JNI pierde una de las caractersticas ms importantes que Java le confiere, su portabilidad. (Una forma de solventar esto, es escribir una implementacin separada del cdigo JNI por cada plataforma, y hacer a Java detectar el sistema operativo para ejecutar una u otra implementacin llegado el momento). 5. No hay recoleccin de basura en el lado JNI, (el cdigo JNI debe deslocalizar explcitamente sus punteros). El colector automtico de basura de Java es algo distinto a malloc/free en C, dado que puede mover objetos despus de que se les haya sido asignada la memoria necesaria. Es por lo tanto de vital importancia que los punteros a objetos Java sean obtenidos y bloqueados correctamente. Los programadores habituados a C a menudo no entienden esto, lo que puede llevarles a provocar errores bastante esotricos e irreproducibles. Por todo lo anterior, JNI debe ser utilizado con cautela y suele ser evitado por los desarrolladores Java. Por ejemplo, la mayora de las bases de datos JDBC se comunican directamente con un socket en lugar de utilizar las APIs existentes en C. CMO FUNCIONA EL JNI En JNI, las funciones nativas se implementan en archivos .c o .cpp por separado (C++ ofrece una interfaz con JNI ligeramente ms clara). Cuando la mquina virtual invoca a la funcin, le pasa un puntero a JNIEnv, un puntero a jobject, y cualquier nmero de argumentos declarados por el mtodo Java. Una funcin de JNI debera parecerse a esto: JNIEXPORT void JNICALL Java_ClassName_MethodName (JNIEnv *env, jobject obj) { //El mtodo nativo se implementa aqu } El puntero JNIEnv *env es una estructura que contiene la interfaz hacia la mquina virtual. Incluye todas las funciones necesarias para interactuar con la JVM (Java Virtual Machine) y para trabajar con los objetos Java. Como ejemplos de uso de esta interfaz, se pueden mencionar la conversin de vectores (estilo C) de/a vectores Java o cadenas nativas (punteros a carcter) de/a cadenas Java (objetos String); instanciacin de objetos, lanzamiento y captura de excepciones, etc.

TECNOLOGIA DE SOFTWARE PARA ELECTRONICA II


En esencia, usando JNIEnv puede hacerse cualquier cosa que el cdigo Java pueda hacer; eso s, con una dificultad considerablemente incrementada. Por ejemplo, el siguiente fragmento de cdigo convierte una cadena de Java en una nativa. //Cdigo C++ JNIEXPORT void JNICALL Java_ClassName_MethodName (JNIEnv *env, jobject obj, jstring javaString) { //Tomar la cadena nativa de la cadena de java const char *nativeString = env->GetStringUTFChars(javaString, 0); //Hacer algo con ella /* NO OLVIDE ESTA LNEA, libera el espacio ocupado por la cadena usada * sto tiene que ver con la forma en que Java maneja las cadenas */ env->ReleaseStringUTFChars(javaString, nativeString); } //C code JNIEXPORT void JNICALL Java_ClassName_MethodName (JNIEnv *env, jobject obj, jstring javaString) { //Tomar la cadena nativa de la cadena de java const char *nativeString = (*env)->GetStringUTFChars(env, javaString, 0); //Hacer algo con ella /* NO OLVIDE ESTA LNEA, libera el espacio ocupado por la cadena usada * sto tiene que ver con la forma en que Java maneja las cadenas */ (*env)->ReleaseStringUTFChars(env, javaString, nativeString); } Ntese que el cdigo JNI de C++ es sintcticamente ms claro que el cdigo en C, porque al igual que Java, C++ usa una semntica de invocacin de mtodos orientada a objetos, Esto implica que en C, el parmetro env debe ser desreferenciado usando (*env) y debe ser pasado explcitamente (aparece como parmetro) a los mtodos de JNIEnv. En C++, el parmetro env se desreferencia usando env-> y se pasa implcitamente como parte de la semntica de invocacin de mtodos orientada a objetos (no aparece como parmetro porque el mtodo forma parte de env cuando se trata como un objeto). Los tipos de datos nativos pueden sufrir conversiones desde/hacia tipos de datos Java. Para tipos complejos, tales como los objetos, arrays y cadenas, el mtodo nativo debe convertir los datos explcitamente llamando a mtodos en el JNIEnv (Java Native Interface Environment ).

TECNOLOGIA DE SOFTWARE PARA ELECTRONICA II 3. Programas Realizados en clase PROGRAMA 1 Ttulo: Saludo desde JNI Este es un programa base para empezar con el estudio de JNI , para esto empezamos con un saludo

Fig1: Cdigo Java

Fig2: Cdigo Nativo

PROGRAMA 2 Ttulo: Sumar 2 nmeros Descripcin: Nos permite sumar dos datos declarados, y operados desde JNI

Fig3: Cdigo Java

Fig4: Cdigo Nativo PROGRAMA 3

Titulo: Operar con 2 nmeros Este programa consta de 3 mtodos nativos en los cuales se los llama a cada uno enviando valores quemados para la comprobacin del mtodo nativos en las cuales las

TECNOLOGIA DE SOFTWARE PARA ELECTRONICA II funciones retornaran el valor calculado. Como se puede observar los clculos requieren de una nueva librera de C++ para poder calcular.

Fig5: Cdigo Java

Fig6: Cdigo Nativo PROGRAMA 4

Ttulo: Realizar Operaciones Descripcin: Usando el mtodo este programa nos permite realizar operaciones Como lo son :seno, coseno,raz, factorial.

Fig7: Cdigo Java PROGRAMA 5 Ttulo: Envi y Recepcin de Caracteres

Fig8: Cdigo Nativo

Descripcin: Este programas nos permite poder conocer como enviar datos usando cdigo nativo, tener muy claro cmo funciona la transmisin de datos . nos permitir realizar varias aplicaciones .

Fig9: Cdigo Java

Fig10: Cdigo Nativo

TECNOLOGIA DE SOFTWARE PARA ELECTRONICA II PROGRAMA 6 Ttulo: Arreglos Descripcin: Como su nombre lo indica el presente programa nos ayuda a entender como funciona los arreglos en cdigo nativo, para entender la teora realizamos la suma de dos vectores.

Fig7: Cdigo Java PROGRAMA 7 Ttulo: Prueba

Fig8: Cdigo Nativo

Descripcin: El programa nos deca que debemos realizar operaciones como: suma, log, menor, raz

TECNOLOGIA DE SOFTWARE PARA ELECTRONICA II

4. Conclusiones Recomendaciones
Comprobamos la importancia de JNI (Java Native Interface),porque es mecanismo que permite ejecutar funciones C y C++ desde Java. el

Es importante tener bien clara la teora, ya que esto nos permitir acceder a libreras nativas,con esto se conseguir crear un buen programa

5. Bibliografa
http://macprogramadores.org/documentacion/jni.pdf http://es.wikipedia.org/wiki/Java_Native_Interface

Você também pode gostar