SlideShare una empresa de Scribd logo
1 de 16
ESCUELA
                     POLITÉCNICA
                     DEL EJÉRCITO
 TECNOLOGÍA
DE SOFTWARE II

                     LIBRERÍAS
INTEGRANTES:         NATIVAS
 KATHERINE GARCÉS
 JUAN PEÑAFIEL
LIBRERÍAS NATIVAS




   Una de las aplicaciones de la JNI es escribir métodos nativos
    que aprovechan códigos existentes en las bibliotecas nativas.

   Los enfoques descritos en este capítulo se exponen
    directamente a una librería nativa utilizando métodos
    nativos, y por lo tanto tienen la desventaja de hacer una
    aplicación que llama tales métodos nativos que dependen
    de la biblioteca nativa. Tal solicitud puede ejecutar sólo en un
    sistema operativo que suministra la biblioteca nativa. Una
    aproximación preferida es declarar independiente del
    sistema operativo métodos nativos. Sólo las funciones nativas
    la aplicación de esos métodos nativos utilizan las bibliotecas
    nativas directamente, limitando la necesidad de portar a las
    funciones nativas. La aplicación, incluyendo el declaraciones
    de métodos nativos, no necesita ser portado.
LIBRERÍAS NATIVAS



9.1 Uno-a-uno
 Empecemos        con un ejemplo sencillo.
  Supongamos que queremos escribir un
  contenedor clase que expone la función
  atol en la biblioteca estándar de C:

long atol(const char *str);

La función atol analiza una cadena y
devuelve el valor decimal representado por
la cadena.
LIBRERÍAS NATIVAS




 Definimos una clase contenedora de la
  siguiente manera:

public class C {
public static native int atol(String str);
...
}
LIBRERÍAS NATIVAS




9.2 Stubs compartidas
   El enfoque de uno a uno de mapeo requiere
    escribir una función derivada para cada
    función nativa que desee ajustar.
   Un stub compartido es un método nativo que
    se distribuye a otras funciones nativas. La stub
    compartido es responsable de convertir los
    tipos de argumentos a partir de lo que se
    proporciona por la persona que llama lo que
    es aceptado por las funciones nativas.
LIBRERÍAS NATIVAS



9.3 Uno-a-uno frente a Stubs
compartidas
   Uno-a-uno y stubs compartidos son dos
    maneras de crear clases contenedoras para
    las bibliotecas nativas. Cada uno tiene sus
    propias ventajas.
   La principal ventaja de stubs compartidos es
    que el programador no necesita escribir una
    gran número de funciones auxiliares en
    código nativo. Una vez que una aplicación
    compartida stub tales como CFunction está
    disponible, el programador puede ser capaz
    de construir envoltura clases sin necesidad de
    escribir una sola línea de código nativo.
LIBRERÍAS NATIVAS



   Stubs  compartidas     deben   usarse   con
    cuidado, pues los errores en su uso puede
    conducir a la memoria dañada y aplicación se
    bloquea.

   La ventaja de uno-a-uno, es que normalmente
    es más eficaz en la conversión de los tipos de
    datos que se transfieren entre la máquina
    virtual Java y código nativo.

   Stubs compartidas, por otro lado, puede
    manejar un máximo predeterminado conjunto
    de tipos de argumentos y no se puede lograr
    un rendimiento óptimo incluso para estos tipos
    de argumentos.
LIBRERÍAS NATIVAS




9.4 Aplicación de Stubs
compartidas

  Describiremos la forma en que se puede
  implementar utilizando las funciones
  básicas de JNI.
LIBRERÍAS NATIVAS



 9.4.1 La Clase CPointer
   Nos fijamos en la clase CPointer primero porque es
    la superclase de ambos CFunction y CMalloc. El
    CPointer clase abstracta contiene un campo de
    64 bits, los compañeros, que almacena el puntero
    subyacente C:

public abstract class CPointer {
protected long peer;
public native void copyIn(int bOff, int[] buf,
int off,int len);
public native void copyOut(...);
...
}
LIBRERÍAS NATIVAS



9.4.2 La Clase CMalloc
La clase CMalloc añade dos métodos nativos utilizados
para asignar y liberar memoria C bloques:

public class CMalloc extends CPointer {
private static native long malloc(int size);
public CMalloc(int size) throws OutOfMemoryError {
peer = malloc(size);
if (peer == 0) {
throw new OutOfMemoryError();
}
}
public native void free();
...
}
LIBRERÍAS NATIVAS




9.4.3 La Clase CFunction
   La implementación de la clase CFunction requiere
    el uso de soporte dinámico que une en el sistema
    operativo, así como específico de la CPU código
    ensamblador. La implementación se presenta a
    continuación está dirigida específicamente hacia
    el medio ambiente Win32/Intel x86.

   Una vez que entienda los principios detrás de la
    aplicación de la CFunction clase, puede seguir los
    mismos pasos para ponerla en práctica en otras
    plataformas. La clase CFunction se define como
    sigue:
LIBRERÍAS NATIVAS



9.5 Clases de pares
Uno-a-uno y stubs compartidos tienen el problema
de envolver funciones nativas. También se
encontró con el problema de envolver estructuras
de datos nativas en el curso de la construcción de
la aplicación stubs compartida. Recordemos la
definición de la clase CPointer:

public abstract class CPointer {
protected long peer;
public native void copyIn(int bOff, int[] buf,
int off, int len);
public native void copyOut(...);
...
}
LIBRERÍAS NATIVAS



Las clases que tienen estructuras de datos
nativas, como CPointer y CMalloc, se llaman clases
de pares. Usted puede construir clases pares para
una    variedad    de     estructuras   de  datos
nativas, incluyendo, por ejemplo:

• descriptores de fichero
• descriptores de socket
• ventanas u otros gráficos de interfaz de usuario
componentes
LIBRERÍAS NATIVAS


     9.5.1 Clases de pares en la
           Plataforma Java
   La corriente de JDK y versiones del SDK de Java 2
    (1,1 y 1,2) utilizar las clases de pares internos para
    implementar el java.io, java.net y paquetes
    java.awt. Una instancia de la java.io.FileDescriptor
    clase, por ejemplo, contiene un campo privado
    que representa fd un descriptor de fichero nativo:

// Implementation of the java.io.FileDescriptor class
public final class FileDescriptor {
private int fd;
...
}
LIBRERÍAS NATIVAS



   9.5.2 Estructuras de liberar a
       los nativos de Datos
Clases de pares se definen en el lenguaje de programación
Java, por lo que los casos de compañeros las clases serán
basura   recogida    automáticamente.       Usted   necesita
asegurarse de que, sin embargo, que las estructuras
subyacentes de datos nativos será liberado también.

Recordemos que la clase contiene un método CMalloc libre
para liberar explícitamente malloc'ed la memoria C:


public class CMalloc extends CPointer {
public native void free();
...
}
LIBRERÍAS NATIVAS



       9.5.3 Backpointers para
           instancias pares
   Hemos demostrado que las clases de pares
    contienen típicamente un campo privado
    que se refiere a la subyacente estructura de
    datos original. En algunos casos es deseable
    incluir también una referencia de la
    estructura de datos nativa de las instancias
    de la clase peer. Esto sucede, por
    ejemplo, cuando el código nativo tiene que
    iniciar devoluciones de llamada a los
    métodos de instancia en la clase de pares.

Más contenido relacionado

La actualidad más candente (19)

Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
 
Compiladores (python)
Compiladores (python)Compiladores (python)
Compiladores (python)
 
Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)
 
Semana9 Vbr
Semana9 VbrSemana9 Vbr
Semana9 Vbr
 
[ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java [ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java
 
Introducción android ndk
Introducción android ndkIntroducción android ndk
Introducción android ndk
 
FPJUCE - Capitulo1
FPJUCE - Capitulo1FPJUCE - Capitulo1
FPJUCE - Capitulo1
 
Lenguaje de programación java. Detalles
Lenguaje de programación java. DetallesLenguaje de programación java. Detalles
Lenguaje de programación java. Detalles
 
Hack x crack_java
Hack x crack_javaHack x crack_java
Hack x crack_java
 
Tecnologia Java
Tecnologia JavaTecnologia Java
Tecnologia Java
 
Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
 
Guia del trabajo con excepciones
Guia del trabajo con excepcionesGuia del trabajo con excepciones
Guia del trabajo con excepciones
 
Clase2
Clase2Clase2
Clase2
 
JAVA
JAVAJAVA
JAVA
 
Introduccion A Java
Introduccion A JavaIntroduccion A Java
Introduccion A Java
 
Todo sobre C#
Todo sobre C#Todo sobre C#
Todo sobre C#
 
Información básica Java
Información básica JavaInformación básica Java
Información básica Java
 
Informatica
InformaticaInformatica
Informatica
 
Java de erlin
Java de erlinJava de erlin
Java de erlin
 

Similar a Librerías nativas

Similar a Librerías nativas (20)

Traduccion capitulo 9 (completo)
Traduccion capitulo 9 (completo)Traduccion capitulo 9 (completo)
Traduccion capitulo 9 (completo)
 
investigacion unidad tres componentes y librerias
investigacion unidad tres componentes y libreriasinvestigacion unidad tres componentes y librerias
investigacion unidad tres componentes y librerias
 
Lenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosLenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetos
 
Guia3 java
Guia3 javaGuia3 java
Guia3 java
 
Apuntes ejercicios programacion i
Apuntes ejercicios programacion iApuntes ejercicios programacion i
Apuntes ejercicios programacion i
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Diapositiva java
Diapositiva javaDiapositiva java
Diapositiva java
 
Visual studio.net
Visual studio.netVisual studio.net
Visual studio.net
 
Java desde 0
Java desde 0Java desde 0
Java desde 0
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Lp pract2006
Lp pract2006Lp pract2006
Lp pract2006
 
INTRODUCCION A LOS LENGUAJES DE PROGRAMACION
INTRODUCCION A LOS LENGUAJES DE PROGRAMACIONINTRODUCCION A LOS LENGUAJES DE PROGRAMACION
INTRODUCCION A LOS LENGUAJES DE PROGRAMACION
 
Guía1
Guía1Guía1
Guía1
 
Programación con java en Eclipse
Programación con java en EclipseProgramación con java en Eclipse
Programación con java en Eclipse
 
Nombre de la_escuela
Nombre de la_escuelaNombre de la_escuela
Nombre de la_escuela
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
 
Java
JavaJava
Java
 
Uso de las clases iostream
Uso de las clases iostreamUso de las clases iostream
Uso de las clases iostream
 
Resumen semana2
Resumen semana2Resumen semana2
Resumen semana2
 

Librerías nativas

  • 1. ESCUELA POLITÉCNICA DEL EJÉRCITO TECNOLOGÍA DE SOFTWARE II LIBRERÍAS INTEGRANTES: NATIVAS  KATHERINE GARCÉS  JUAN PEÑAFIEL
  • 2. LIBRERÍAS NATIVAS  Una de las aplicaciones de la JNI es escribir métodos nativos que aprovechan códigos existentes en las bibliotecas nativas.  Los enfoques descritos en este capítulo se exponen directamente a una librería nativa utilizando métodos nativos, y por lo tanto tienen la desventaja de hacer una aplicación que llama tales métodos nativos que dependen de la biblioteca nativa. Tal solicitud puede ejecutar sólo en un sistema operativo que suministra la biblioteca nativa. Una aproximación preferida es declarar independiente del sistema operativo métodos nativos. Sólo las funciones nativas la aplicación de esos métodos nativos utilizan las bibliotecas nativas directamente, limitando la necesidad de portar a las funciones nativas. La aplicación, incluyendo el declaraciones de métodos nativos, no necesita ser portado.
  • 3. LIBRERÍAS NATIVAS 9.1 Uno-a-uno  Empecemos con un ejemplo sencillo. Supongamos que queremos escribir un contenedor clase que expone la función atol en la biblioteca estándar de C: long atol(const char *str); La función atol analiza una cadena y devuelve el valor decimal representado por la cadena.
  • 4. LIBRERÍAS NATIVAS  Definimos una clase contenedora de la siguiente manera: public class C { public static native int atol(String str); ... }
  • 5. LIBRERÍAS NATIVAS 9.2 Stubs compartidas  El enfoque de uno a uno de mapeo requiere escribir una función derivada para cada función nativa que desee ajustar.  Un stub compartido es un método nativo que se distribuye a otras funciones nativas. La stub compartido es responsable de convertir los tipos de argumentos a partir de lo que se proporciona por la persona que llama lo que es aceptado por las funciones nativas.
  • 6. LIBRERÍAS NATIVAS 9.3 Uno-a-uno frente a Stubs compartidas  Uno-a-uno y stubs compartidos son dos maneras de crear clases contenedoras para las bibliotecas nativas. Cada uno tiene sus propias ventajas.  La principal ventaja de stubs compartidos es que el programador no necesita escribir una gran número de funciones auxiliares en código nativo. Una vez que una aplicación compartida stub tales como CFunction está disponible, el programador puede ser capaz de construir envoltura clases sin necesidad de escribir una sola línea de código nativo.
  • 7. LIBRERÍAS NATIVAS  Stubs compartidas deben usarse con cuidado, pues los errores en su uso puede conducir a la memoria dañada y aplicación se bloquea.  La ventaja de uno-a-uno, es que normalmente es más eficaz en la conversión de los tipos de datos que se transfieren entre la máquina virtual Java y código nativo.  Stubs compartidas, por otro lado, puede manejar un máximo predeterminado conjunto de tipos de argumentos y no se puede lograr un rendimiento óptimo incluso para estos tipos de argumentos.
  • 8. LIBRERÍAS NATIVAS 9.4 Aplicación de Stubs compartidas Describiremos la forma en que se puede implementar utilizando las funciones básicas de JNI.
  • 9. LIBRERÍAS NATIVAS 9.4.1 La Clase CPointer  Nos fijamos en la clase CPointer primero porque es la superclase de ambos CFunction y CMalloc. El CPointer clase abstracta contiene un campo de 64 bits, los compañeros, que almacena el puntero subyacente C: public abstract class CPointer { protected long peer; public native void copyIn(int bOff, int[] buf, int off,int len); public native void copyOut(...); ... }
  • 10. LIBRERÍAS NATIVAS 9.4.2 La Clase CMalloc La clase CMalloc añade dos métodos nativos utilizados para asignar y liberar memoria C bloques: public class CMalloc extends CPointer { private static native long malloc(int size); public CMalloc(int size) throws OutOfMemoryError { peer = malloc(size); if (peer == 0) { throw new OutOfMemoryError(); } } public native void free(); ... }
  • 11. LIBRERÍAS NATIVAS 9.4.3 La Clase CFunction  La implementación de la clase CFunction requiere el uso de soporte dinámico que une en el sistema operativo, así como específico de la CPU código ensamblador. La implementación se presenta a continuación está dirigida específicamente hacia el medio ambiente Win32/Intel x86.  Una vez que entienda los principios detrás de la aplicación de la CFunction clase, puede seguir los mismos pasos para ponerla en práctica en otras plataformas. La clase CFunction se define como sigue:
  • 12. LIBRERÍAS NATIVAS 9.5 Clases de pares Uno-a-uno y stubs compartidos tienen el problema de envolver funciones nativas. También se encontró con el problema de envolver estructuras de datos nativas en el curso de la construcción de la aplicación stubs compartida. Recordemos la definición de la clase CPointer: public abstract class CPointer { protected long peer; public native void copyIn(int bOff, int[] buf, int off, int len); public native void copyOut(...); ... }
  • 13. LIBRERÍAS NATIVAS Las clases que tienen estructuras de datos nativas, como CPointer y CMalloc, se llaman clases de pares. Usted puede construir clases pares para una variedad de estructuras de datos nativas, incluyendo, por ejemplo: • descriptores de fichero • descriptores de socket • ventanas u otros gráficos de interfaz de usuario componentes
  • 14. LIBRERÍAS NATIVAS 9.5.1 Clases de pares en la Plataforma Java  La corriente de JDK y versiones del SDK de Java 2 (1,1 y 1,2) utilizar las clases de pares internos para implementar el java.io, java.net y paquetes java.awt. Una instancia de la java.io.FileDescriptor clase, por ejemplo, contiene un campo privado que representa fd un descriptor de fichero nativo: // Implementation of the java.io.FileDescriptor class public final class FileDescriptor { private int fd; ... }
  • 15. LIBRERÍAS NATIVAS 9.5.2 Estructuras de liberar a los nativos de Datos Clases de pares se definen en el lenguaje de programación Java, por lo que los casos de compañeros las clases serán basura recogida automáticamente. Usted necesita asegurarse de que, sin embargo, que las estructuras subyacentes de datos nativos será liberado también. Recordemos que la clase contiene un método CMalloc libre para liberar explícitamente malloc'ed la memoria C: public class CMalloc extends CPointer { public native void free(); ... }
  • 16. LIBRERÍAS NATIVAS 9.5.3 Backpointers para instancias pares  Hemos demostrado que las clases de pares contienen típicamente un campo privado que se refiere a la subyacente estructura de datos original. En algunos casos es deseable incluir también una referencia de la estructura de datos nativa de las instancias de la clase peer. Esto sucede, por ejemplo, cuando el código nativo tiene que iniciar devoluciones de llamada a los métodos de instancia en la clase de pares.