Sérialisation sur le système de fichiers. Gestion des exceptions en Java.

Documents pareils
Entrées / Sorties. Entrées / Sorties. Entrées/Sorties. System.out. Fonctionnement par flots (stream) Karima Boudaoud IUT- R&T. Terrain connu.

Flux de données Lecture/Ecriture Fichiers

Développement Logiciel

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Programmer en JAVA. par Tama

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

Cours 14 Les fichiers

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Auto-évaluation Programmation en Java

PROGRAMMATION PAR OBJETS

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Projet de programmation (IK3) : TP n 1 Correction

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Cours 1: Java et les objets

Dis papa, c est quoi un bus logiciel réparti?

Programmation Par Objets

Remote Method Invocation (RMI)

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Chapitre 10. Les interfaces Comparable et Comparator 1

Java Licence Professionnelle CISII,

Programmation Objet Java Correction

Programmation Internet en Java

Une introduction à Java

Corrigé des exercices sur les références

Programmation en Java IUT GEII (MC-II1) 1

Programmation Orientée Objet Java

Cahier des Charges du Projet Domotique. Choquet Mathieu Masson Jérôme Groupe 6. Domotique. p.1

Programmation client-serveur sockets - RPC

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

La carte à puce. Jean-Philippe Babau

INITIATION AU LANGAGE JAVA

as Architecture des Systèmes d Information

Introduction : les processus. Introduction : les threads. Plan

Plan du cours. Historique du langage Nouveautés de Java 7

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

OpenPaaS Le réseau social d'entreprise

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

TD/TP PAC - Programmation n 3

Introduction au langage Java

TP1 : Initiation à Java et Eclipse

Applet pour visualiser les variables «automate» notifiées

Programmation système I Les entrées/sorties

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Apprendre Java en 154 minutes

Gestion distribuée (par sockets) de banque en Java

Un ordonnanceur stupide

Synchro et Threads Java TM

Premiers Pas en Programmation Objet : les Classes et les Objets

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Programmation avec des objets : Cours 7. Menu du jour

Langage Java. Classe de première SI

Le Modèle de Sécurité dans JAVA

Package Java.util Classe générique

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Serveur d'archivage 2007 Installation et utilisation de la BD exist

et se trouve popularisé rapidement pour ses possibilités de développement liés au Web. Les

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Java Licence Professionnelle CISII,

La technologie Java Card TM

RMI le langage Java XII-1 JMF

TD/TP PAC - Programmation n 3

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Généralités sur le Langage Java et éléments syntaxiques.

Remote Method Invocation Les classes implémentant Serializable

Chapitre VI- La validation de la composition.

Threads. Threads. USTL routier 1

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

COMPARAISONDESLANGAGESC, C++, JAVA ET

Programmation Réseau SSH et TLS (aka SSL)

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Java 1.5 : principales nouveautés

RAPPORT DE STAGE DE TROISIEME ANNEE EFFECTUE A

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INF 321 : mémento de la syntaxe de Java

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Programmation système de commandes en C

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Arbres binaires de recherche

Langage à objets : JAVA (1)

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

TD3: tableaux avancées, première classe et chaînes

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Environnements de développement (intégrés)

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

7 Développement d une application de MapReduce

Calcul Parallèle. Cours 5 - JAVA RMI

Corrigés des premiers exercices sur les classes

Modèle à composants. Daniel Hagimont. IRIT/ENSEEIHT 2 rue Charles Camichel - BP TOULOUSE CEDEX 7. Remerciements

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

Java c est quoi? Java pourquoi?

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Transcription:

Sérialisation sur le système de fichiers. Gestion des exceptions en Java. Christophe Gravier, Frédérique Laforest, Julien Subercaze Télécom Saint-Étienne Université Jean Monnet {pnom.nom}@univ-st-etienne.fr FI2_INFO4 2012 2013 it tse ujm 1 / 24

Plan Objectifs Sérialisation Gestion des exceptions 2 / 24

Objectifs pédagogiques Obligatoires Sérialisation buffered et unbuffered de types primitifs et d instances de classes en JDK 7 Plus de détails sur http://docs.oracle.com/javase/ tutorial/essential/io/index.html Gestion des exceptions en Java Optionnel Utiliation de la nouvelle API de gestion de fichiers du JDK 7. 3 / 24

Plan Objectifs Sérialisation Gestion des exceptions 4 / 24

Sérialisation. Action de sérialiser Rendre l instance d une classe persistente. Persistente? Il s agit d opérer une transformation réversible de l instance dans une forme (textuel, tableau de bits, etc.). c est donc une opération de sauvegarde d élément en mémoire (RAM) sur un support (disque dur, réseau, etc.) Exemple Un logiciel de traitement de texte sérialise un document sur le système de fichier lors de l opération de sauvegarde, et désérialise le document pour le charger en mémoire lors de l opération de chargement. 5 / 24

Processus de sérialisation/désérialisation Programme en mémoire Flux de 8 bits (byte stream) Database Fichiers Socket Disque dur Réseau Désérialisation (input stream) Sérialisation (output stream) Fig.: Les processus de sérialisation/désérialisation. 6 / 24

Byte streams Principe Un programme Java utilise de flux d octets en Input/Output (I/O) Toutes les classes de I/O héritent des classes InputStream et OutputStream 7 / 24

Exemple 1 public static void main ( String [] args ) 2 { 3 FileInputStream in = 4 new FileInputStream (" doc. txt "); 5 6 FileOutputStream out = 7 new FileOutputStream ("doc - copie. txt "); 8 int c; 9 while ((c = in. read ())!= -1) { 10 out. write (c); 11 } 12 13 in. close (); 14 out. close (); 15 } 8 / 24

Datatype I/O ByteStreams sont des primtives de sérialisation de bas niveau ByteStreams sont des structures de données pour la sérialisation bas niveau pas forcément pratique pour toutes les structures de données plus ou moins complexes, et qu on aimerait ne pas avoir à convertir en byte streams nous même. exemple: les chaînes de caractères (String) Sérialiser des chaînes On utilise non plus un flux de d octets mais un flux de caractères Un flux de caractère réalise des opérations d I/O caractère par caractère (et non plus octet par octet) 9 / 24

Exemple flux I/O de caractères 1 public static void main ( String [] args ) 2 { 3 FileReader in = 4 new FileReader(" doc. txt "); 5 6 FileWriter out = 7 new FileWriter("doc - copie. txt "); 8 int c; 9 while ((c = in. read ())!= -1) { 10 out. write (c); 11 } 12 in. close (); 13 out. close (); 14 } So what? I/O de chaînes UTF-8, donc par train de 16 bits (et non plus 8 comme avec FileInputStream et FileOutputStream) 10 / 24

Exemple flux I/O de lignes de caractères 1 public static void main ( String [] args ) 2 { 3 BufferedReader in = 4 new BufferedReader(" doc. txt "); 5 6 PrintWriter out = 7 new PrintWriter("doc - copie. txt "); 8 9 String l; 10 while (( l = in.readline())!= null ) { 11 out.println(l); 12 } 13 in. close (); 14 out. close (); 15 } 11 / 24

Buffered and unbuffered I/O BufferedReader in = new BufferedReader("doc.txt");??? Une méthode unbuffered écrit/lit octet par octet, caractère par caractère, ligne par ligne, etc. sur le support de sérialisation (système de fichier, réseau, etc.) c est coûteux en terme d accès au support et concurrence des programmes dans l ordonnanceur des processus de l OS! Pour minimiser cela, les méthodes buffered: remplissent une zone mémoire lors d opération d écriture (et effectue la sérialsiation sur le support lorsque la zone mémoire est pleine) vide une zone mémoire lors d opération de lecture (et effectue la désérialisarion à partir du support lorsque la zone est vide) les sérialisations buffered disposent de la méthode flush() pour forcer le vidage de la mémoire avant que celle-ci ne soit pleine ou vide suivant si l on désérialise ou sérialise. 12 / 24

Data streams Et si je dois sérialiser autre chose que des octets ou des caractères? On utilise pour les types primitifs ((boolean, char, byte, short, int, long, float, et double) les Data streams, et pour les instances de classes les Object Streams 13 / 24

Exemple de Data stream buffered sur le filesystem 1 String datafile = " invoicedata "; 2 double [] prices = { 19.99, 9.99, 15.99, 3.99, 4. 99 }; 3 int [] units = { 12, 8, 13, 29, 50 }; 4 String [] descs = { " Java T- shirt ", 5 " Java Mug ", 6 " Duke Juggling Dolls ", 7 " Java Pin ", 8 " Java Key Chain " }; 9 10 DataOutputStream out = new DataOutputStream ( 11 new BufferedOutputStream ( 12 new FileOutputStream ( datafile ))); 13 14 for ( int i = 0; i < prices. length ; i ++) { 15 out. writedouble ( prices [i ]); 16 out. writeint ( units [i ]); 17 out. writeutf ( descs [i ]); 18 } 19 out. close (); 14 / 24

Exemple Object streams 1/2 1 class Personne implements java.io.serializable { 2 private String nom = ""; 3 public Personne ( String n) { this. nom = n; } 4 public String getnom () { return nom ; } 5 } 6 7 public void serialisepersonne ( Personne p) 8 { 9 FileOutputStream fout = 10 new FileOutputStream (p. getnom ()+ ". obj "); 11 12 ObjectOutputStream oos = 13 new ObjectOutputStream ( fout ); 14 15 oos. writeobject ( chris ); 16 oos. close (); 17 } 15 / 24

Exemple Object streams 2/2 1 public Personne deserialisepersonne ( Personne p) 2 { 3 FileInputStream fin = 4 new FileInputStream (p. getnom ()+ ". obj "); 5 6 ObjectIntputStream ois = 7 new ObjectInputStream ( fin ); 8 9 // transtypage necessaire 10 Personne p = ( Personne ) ois. writeobject ( chris ); 11 return p; 12 ois. close (); 13 } 16 / 24

Plan Objectifs Sérialisation Gestion des exceptions 17 / 24

Exception? Et si... Et si le fichier dans lequel nous voulons sérialiser n existe pas? Et si la base de données était saturée? Et si l utilisateur exécutant le programme n a pas les droits sur le fichier en lecture? Et si... Motivations Pour palier à ces problèmes, Java fournit un mécanisme de gestion des exceptions. La gestion des exceptions n est pas un mécanisme uniquement appliqué au I/O dans le language... mais c est une bonne occasion pour vous en parler! 18 / 24

Gestion des exceptions en Java Instance de la classe Exception Lorsqu un problème survient à l exécution d un programme, une instance d une classe héritant de la classe java.lang.exception est créé. Cette instance remonte dans la pile d appel de méthodes jusqu à ce qu elle soit traitée Dans le cas où l exception n avait pas explicitement été prévu par le programmeur (comme une sous-classe de la classe Exception), une instance de la classe Exception est créé. 19 / 24

Exemple d exception Imaginons que je souhaite gérer l exception d une adresse email ne contenant pas d aérobase dans une saisie à l entrée standard. Pour cela, je commence par créer une nouvelle classe dérivant de la classe Exception. 1 public class BadEmailException extends Exception { 2 public BadEmailException ( String msg ){ 3 super ( msg ); 4 } 5 } 20 / 24

Relai de l erreur potentielle dans la pile d appel 1 public class EnterInfo { 2 public saisieemail () throws BadEmailException { 3 String mail ; 4 System. out. println (" Donner l email "); 5 System.in. read ( mail ) 6 if (! mail. contains ("@")) 7 { 8 throw new BadEmailException (" le " + 9 " mail "+ mail +" ne contient pas "+ 10 "le caractere @ "); 11 } 12 } 13 } 21 / 24

Gestion de l exception : Try-Catch-Finally 1 public class Test { 2 public test () { 3 try { 4 // appel " risqué" 5 String mail = new EnterInfo (). saisieemail (); 6 } 7 catch ( BadEmailException reason ) { 8 // exception detectée 9 System. out. println (" Erreur : "+ 10 reason. getmessage ()); 11 } 12 finally { 13 // dans tous les cas on passe ici 14 System. out. println (" Fin de l appel "+ 15 " de la methode."); 16 } 17 } 22 / 24

Exemple: Et si le fichier n existe pas? 1 FileInputStream fis = null ; 2 BufferedInputStream bis = null ; 3 try { 4 fis = new FileInputStream ( file ); 5 bis = new BufferedInputStream ( fis ); 6 } 7 catch ( Fi lenot Found Except ion e) { 8 System. out. println ("Le fichier "+ 9 file. getname ()+ "n exsite pas "); 10 } 11 return bis ; 23 / 24

The End 24 / 24