Interfa - PowerPoint PPT Presentation

About This Presentation
Title:

Interfa

Description:

Auteur : Cyril MOQUEREAU. Ann e : 2001/2002. Plan d' tude. Le principe de fonctionnement ... Manipulation des Strings, des tableaux, objets Java, etc... – PowerPoint PPT presentation

Number of Views:23
Avg rating:3.0/5.0
Slides: 19
Provided by: al60111
Category:
Tags: auteur | interfa

less

Transcript and Presenter's Notes

Title: Interfa


1
Interfaçage Java et C/C
  • Présentation de Système
  • Ecole Ingénieurs 2000
  • Filière Informatique Réseaux
  • Auteur Cyril MOQUEREAU
  • Année 2001/2002

2
Plan détude
  • Le principe de fonctionnement
  • Prise en main
  • Les possibilités de la JNI
  • Manipulation des Strings, des tableaux, objets
    Java, etc...
  • Les limites d utilisation
  • Portabilité, Efficacité, Sécurité

3
I. Cas dutilisation de la JNI
  • Accéder aux ressources système
  • Utiliser du code déjà implémenté
  • Coder une partie critique d un programme

4
Présentation dun exemple
  • Les objectifs
  • Interfacer un programme Java avec du code C
  • Décomposer la réalisation
  • Observer les principes de base
  • Les étapes de réalisation
  • 1. Réalisation dun programme Java
  • 2. Création du fichier de prototypage
  • 3. Implémentation des méthodes natives
  • 4. Compilation / Exécution du programme

5
1ère étape Réalisation du programme
Java
  • class HelloWorld
  • public native void displayHelloWorld()
  • static
  • System.loadLibrary("hello")
  • public static void main(String args)
  • new HelloWorld().displayHelloWorld()

6
2ème étape (1) Création du fichier de
prototypage
  • 1. javac HelloWorld.java
  • 2. javah HelloWorld

/ DO NOT EDIT THIS FILE - it is machine
generated / include ltjni.hgt / Header for class
HelloWorld / ifndef _Included_HelloWorld define
_Included_HelloWorld ifdef __cplusplus extern
"C" endif / Class HelloWorld
Method displayHelloWorld Signature ()V
/ JNIEXPORT void JNICALL Java_HelloWorld_displayH
elloWorld (JNIEnv , jobject) ifdef
__cplusplus endif endif
3.
7
2ème étape (2) L argument JNIEnv
  • Fonction Interagir avec la JVM
  • Comportement

Pointeur sur GetFieldID Pointeur sur
GetMethodID Pointeur sur FindClass
GetFieldID() GetMethodID() FindClass()
JNIEnv
8
3ème étape Implémentation du code natif
  • include ltjni.hgt
  • include "HelloWorld.h"
  • include ltstdio.hgt
  • JNIEXPORT void JNICALL
  • Java_HelloWorld_displayHelloWorld(
  • JNIEnv env, jobject obj)
  • printf("Hello world!\n")
  • return

9
4ème étape Compilation et Exécution
  • Compiler le code C (exemple sous Linux)
  • gcc -shared -I ./java/include \
  • I ./java/include/linux HelloWorldImp.c -o
    libhello.so
  • Génère une librairie dynamique
  • Exécution du programme
  • java HelloWorld
  • Appel de la méthode native par
  • System.loadLibrary("hello")

10
Les types primitifs de la JNI
  • Accès direct aux primitives Java
  • Passage des données de type primitif par valeur

Java Type Native Type Size in bits Boolean Jboole
an 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
11
II. Les possibilités de la JNI
  • Passer des tableaux ou des chaînes de caractères
  • Interfacer un objet Java
  • Gérer des exceptions Java

12
Passage d un objet Java (1 - Code Java)
  • class MyJavaClass public int aValue public
    void divByTwo() aValue / 2
  • public class UseObjects private native void
    changeObject(MyJavaClass obj)
  • static System.loadLibrary("UseObjImpl")
  • public static void main(String args)
    UseObjects app new UseObjects()
    MyJavaClass anObj new MyJavaClass()
    anObj.aValue 2 app.changeObject(anObj)
    System.out.println("Java " anObj.aValue)

13
Passage d un objet Java (2 - Code natif)
  • include ltjni.hgt
  • extern "C" JNIEXPORT void JNICALL
    Java_UseObjects_changeObject( JNIEnv
    env, jobject,jobject obj) jclass clas
    env-gtGetObjectClass(obj) jfieldID fid
    env-gtGetFieldID(clas, "aValue", "I") jmethodID
    mid env-gtGetMethodID(clas, "divByTwo", "()V")
  • int value env-gtGetIntField(obj, fid)
  • printf("Native d\n", value)
    env-gtSetIntField(obj, fid, 6)
    env-gtCallVoidMethod(obj, mid) value
    env-gtGetIntField(obj, fid) printf("Native
    d\n", value)

14
Signatures des types de la JVM
Signature Type le langage Java
Z boolean B byte C char
S short I int J long
F float D double
15
III. Limites de la JNI
  • Perte de portabilité
  • Compilation ? Rattachement à un système
  • Problèmes defficacité
  • Passages d information de la JNI vers la JVM
  • Faille de sécurité
  • Accès aux ressources systèmes

16
Efficacité graphe comparatif

- rapide
Code C
Code Java
rapide
C Java
17
Bilan détude
  • Des améliorations ont vu le jour entre 1.0, 1.1
    et 1.2
  • Solution à considérer en dernier recours
  • Possibilités de la version Java 1.4
  • suppression de la pile liée au code natif
  • accès directe aux classes / méthodes C

18
Bibliographie
  • Ressources JNI
  • http//java.sun.com/docs/books/tutorial/native1.1
  • http//developer.java.sun.com/developer/
  • http//penserenjava.free.fr/pens/indexMain_1800.h
    tm
  • http//www.javaworld.com/jw-10-1998/jw-10-apptowin
    32.html resources
  • Tests d efficacité
  • http//www.hyperactiveinc.com/tips.asp?techJava
  • http//www.str.com.au/jnibench/
Write a Comment
User Comments (0)
About PowerShow.com