Adwqdqw

Páginas: 6 (1439 palabras) Publicado: 9 de diciembre de 2012
Manejo de datos de puertos paralelos  
Aunque la potencia de las API de Java es más que suficiente para casi todo tipo de aplicaciones, algunas de ellas necesitan utilizar la potencia específica de una plataforma en concreto.
 
 Java desde un principio incluyo una forma de hacer llamadas nativas desde la máquina virtual y viceversa, pero tenía 2 problemas:
 
1.      Las llamada a códigonativo desde Java accedían a estructuras C, pero no estaba definida la posición exacta que debían ocupar estos campos en memoria con lo que una llamada nativa en una máquina virtual no coincidían con las llamadas en otra máquina virtual.
 
2. Las llamadas nativas en versiones anteriores a JSDK 1.1 se basaban en el uso de un recolector de basura conservativo, este recolector recogía el puntero nativoque apuntaba a un objeto Java, por lo tanto cuando se apuntaba a un objeto Java desde el método nativo éste no se liberaba nunca más.
 
Esta forma de llamadas nativas es la que se usó en las primeras versiones de Java para implementar clases que accedían a la maquina host como java.io*, java.net*.
 
Debido a los problemas que se presentaron al invocar métodos nativos se implementó una nuevaforma de acceder a estos métodos nativos a la que se llamó JNI.
 
JNI es un entorno el cual nos permite ejecutar código nativo de la maquina en la cual se está corriendo desde Java y viceversa.
 
Código Nativo son funciones escritas en algún leguaje de programación como C o C++, donde se ejecuta la máquina virtual.
 
Aquí se muestra un esquema de como un programa escrito en C interactúa conuno escrito en Java.
 
 

 
 El siguiente esquema muestra el caso de un programa Java interactúa con uno escrito en lenguaje nativo en este caso C.

 
            El siguiente esquema muestra el lugar donde actúa JNI.

 
 
 

Implementación de JNI
 Para implementar JNI se debe seguir los siguientes pasos:
 
 
* Escribir el código en java
* Compilar el Código Java
* Crear el fichero .h
*  Escribir la implementación del Método Nativo.
* Crear una librería Compartida.
* Ejecutar el programa.
 
  
Escribir el código en java
 
 
            En el código que se generara  se deben definir dentro de una clase Java todos los métodos Java, como los métodos nativos. Para la implementación de un método en un lenguaje de programación distinto de Java, sedebe incluir la palabra clave native como parte de la definición del método dentro de la clase java. La clave native indica al compilador Java que la función es una función en lenguaje nativo. En este caso la clase java creada es Parallel.java, donde readOneByte (int address)  y writeOneByte (int address, int oneByte)   son los métodos que están implementados en C.
 

  package parport;
   public class ParallelPort {
 
public ParallelPort (int portBase)
                        {
                                    this.portBase = portBase;
                        }
  
public int read ()
                        {
                                    return ParallelPort.readOneByte (this.portBase+1);
                        }
           
public void write (int oneByte)                        {
                                    ParallelPort.writeOneByte(this.portBase, oneByte);
                        }

  
public static native int readOneByte (int address);
 
                      public static native void writeOneByte(int address, int oneByte);
 
            static
                        {
                                     System.loadLibrary("parport");                        }
            }
 
            El método System.loadLibrary es invocado para cargar la librería compartida que se creara cuando compile la implementación del código. Este método se coloca con un inicializador static. El argumento de System.loadLibrary es el nombre de la librería. El sistema utiliza un estándard, pero específico de la plataforma, para convertir el...
Leer documento completo

Regístrate para leer el documento completo.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS