Programmation Réseau. La sérialisation. Jean-Baptiste.Yunes@univ-paris-diderot.fr armand@informatique.univ-paris-diderot.fr. !

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

Développement Logiciel

Flux de données Lecture/Ecriture Fichiers

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

2 Chapitre 1 Introduction

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

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

Calcul Parallèle. Cours 5 - JAVA RMI

Projet de programmation (IK3) : TP n 1 Correction

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

Remote Method Invocation Les classes implémentant Serializable

Auto-évaluation Programmation en Java

Remote Method Invocation (RMI)

RMI le langage Java XII-1 JMF

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

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

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Programmation par composants (1/3) Programmation par composants (2/3)

Chapitre 10. Les interfaces Comparable et Comparator 1

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

Programmer en JAVA. par Tama

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

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

Java Licence Professionnelle CISII,

TP1 : Initiation à Java et Eclipse

Cours 1: Java et les objets

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Premiers Pas en Programmation Objet : les Classes et les Objets

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

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

Intergiciel - concepts de base

Tp 1 correction. Structures de données (IF2)

Bases Java - Eclipse / Netbeans

OpenPaaS Le réseau social d'entreprise

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)

Derrière toi Une machine virtuelle!

Corrigé des exercices sur les références

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

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Une introduction à Java

Architecture Orientée Service, JSON et API REST

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

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

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

Programmation Objet 2

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

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

Notes de cours Practical BigData

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Programmation avec des objets : Cours 7. Menu du jour

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Package Java.util Classe générique

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

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Java c est quoi? Java pourquoi?

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Introduction aux composants logiciels : JavaBeans Master des Technologies de l'internet

Architecture applicative et Cartographie

Objets et Programmation. origine des langages orientés-objet

Threads. Threads. USTL routier 1

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

Java - la plateforme

Programme Compte bancaire (code)

Programmation Internet en Java

La gestion de la persistance avec Hibernate. Hibernate et la gestion de persistance. La gestion de la persistance (1/2) Introduction

Synchro et Threads Java TM

Programmation client-serveur sockets - RPC

Programmation Réseau SSH et TLS (aka SSL)

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

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Projet gestion d'objets dupliqués

SOAP Concepts Application à Glassfish

Java 1.5 : principales nouveautés

INITIATION AU LANGAGE JAVA

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

TD/TP PAC - Programmation n 3

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

Un ordonnanceur stupide

Utilisation d objets : String et ArrayList

Programmation en Java IUT GEII (MC-II1) 1

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

OS Réseaux et Programmation Système - C5

Corrigés des premiers exercices sur les classes

Programmation par les Objets en Java

Programmation Par Objets

Héritage presque multiple en Java (1/2)

La base de données XML exist. A. Belaïd

.NET remoting. Plan. Principes de.net Remoting

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

as Architecture des Systèmes d Information

Introduction : les processus. Introduction : les threads. Plan

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

Systèmes répartis. Fabrice Rossi Université Paris-IX Dauphine. Systèmes répartis p.1/49

Utiliser Java sans BlueJ

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

7 Développement d une application de MapReduce

Programmation Objet Java Correction

Création d une application JEE

Cours 6 : Programmation répartie

Transcription:

Programmation Réseau La sérialisation Jean-Baptiste.Yunes@univ-paris-diderot.fr armand@informatique.univ-paris-diderot.fr UFR Informatique 2013-2014

Pourquoi Texte de la section Encoder l état mémoire d un objet pour Des besoins de persistance: Pouvoir le stocker et le «re-créer» ultérieurement dans une autre instance de JVM On peut stocker un objet sérialisé dans un fichier, une base de données De transmission: Déplacer un objet via un appel de type RMI 2

Java Texte seulement? de la section C est un procédé utile complètement indépendant des langages Framework.NET de Microsoft C++ (pas de manière native) Ocaml Python, etc Autres noms: Marshalling / unmarshalling Linéarisation 3

Quels Texte de objets la section Java? Tous ceux qui implémentent l interface Serializable une interface «vide», i.e. sans méthode Choix explicite Il n y a pas de sens à sérialiser certains objets InputStream Le bénéfice qui serait associé n est pas évident Thread 4

Comment? Texte de la section En général on décompose l objet en éléments les plus petits (jusqu à descendre à des éléments de types de base du langage), et on encode chacun de ces éléments les éléments doivent être eux aussi sérialisables pour déclarer un élément comme non sérialisable il faut le déclarer en tant que transient Il faut aussi conserver la structure de l objet pour recomposer l objet au moment de la «désérialisation». Objets composés, tableaux, listes, 5

Quelle Texte de représentation? la section XML (SOAP) «Lisible» J mais Volumineux L XML binaire JSON (essentiellement lié à JavaScript) YAML XDR (historique C) Formats binaires spécifiques (ex: Java) etc. 6

// inspiré de http://www.java2s.com/tutorial/java/0180 File/StoringObjectsinaFile.htm) public class Junk implements Serializable { private String str; public Junk(String s) { str = s; public String tostring() { return str; 7

// inspiré de http://www.java2s.com/tutorial/java/0180 File/StoringObjectsinaFile.htm) public class SerOut { public static void main(string[] args) throws Exception { Junk obj1 = new Junk("A"); Junk obj2 = new Junk("B"); Junk obj3 = new Junk("V"); FileOutputStream fos = new FileOutputStream("JunkObjects.bin"); ObjectOutputStream objectout = new ObjectOutputStream(fos); objectout.writeobject(obj1); objectout.writeobject(obj2); objectout.writeobject(obj3); System.out.println("obj1: " + obj1); System.out.println("obj2: " + obj2); System.out.println("obj3: " + obj3); objectout.close(); 8

// inspiré de http://www.java2s.com/tutorial/java/0180 File/StoringObjectsinaFile.htm) public class SerIn { public static void main(string[] args) throws Exception { int objectcount = 0; Junk object = null; FileInputStream fis = new FileInputStream("JunkObjects.bin"); ObjectInputStream objectin = new ObjectInputStream(fis); while (objectcount < 3) { object = (Junk)objectIn.readObject(); objectcount++; System.out.println("Object n "+objectcount+": "+object); objectin.close(); 9

Un contrôle plus fin La sérialisation par défaut pourrait ne pas convenir tout à fait... on peut vouloir faire quelque chose avec les transients les (ré)initialiser lire/écrire les choses dans un ordre différent etc. 10

Un contrôle plus fin lorsqu un objet Serializable implémente les méthodes privées void readobject(objectinputstream) void writeobject(objectoutputstream) ces méthodes sont appelées lors de la (dé)sérialisation 11

// inspiré de http://www.java2s.com/tutorial/java/0180 File/StoringObjectsinaFile.htm) public class JunkBis implements Serializable { private String str; private int age; public JunkBis(String s,int age) { str = s; this.age = age; public String tostring() { return str+"("+age+")"; private void writeobject(objectoutputstream oos) throws Exception { System.out.println("Je contrôle la situation"); oos.writeint(age); oos.writeutf(str); private void readobject(objectinputstream ois) throws Exception { System.out.println("Je contrôle la situation"); age = ois.readint(); str = ois.readutf(); 12

// inspiré de http://www.java2s.com/tutorial/java/0180 File/StoringObjectsinaFile.htm) public class SerOutBis { public static void main(string[] args) throws Exception { JunkBis obj1 = new JunkBis("A",12); JunkBis obj2 = new JunkBis("B",13); JunkBis obj3 = new JunkBis("V",14); FileOutputStream fos = new FileOutputStream("JunkObjectsBis.bin"); ObjectOutputStream objectout = new ObjectOutputStream(fos); objectout.writeobject(obj1); objectout.writeobject(obj2); objectout.writeobject(obj3); System.out.println("obj1: " + obj1); System.out.println("obj2: " + obj2); System.out.println("obj3: " + obj3); objectout.close(); 13

// inspiré de http://www.java2s.com/tutorial/java/0180 File/StoringObjectsinaFile.htm) public class SerInBis { public static void main(string[] args) throws Exception { int objectcount = 0; JunkBis object = null; FileInputStream fis = new FileInputStream("JunkObjectsBis.bin"); ObjectInputStream objectin = new ObjectInputStream(fis); while (objectcount < 3) { object = (JunkBis)objectIn.readObject(); objectcount++; System.out.println("Object n "+objectcount+": "+object); objectin.close(); 14

dans le contrôle fin, on peut utiliser les méthodes : void defaultwriteobject() de ObjectOutputStream void defaultreadobject() de ObjectInputStream qui permettent d obtenir la sérialisation par défaut de tous les attributs non-transients 15

Version de classe Les classes pouvant évoluer au cours du temps (pour un même concept), il est important de pouvoir définir une compatibilité temporelle La valeur du champ private static final long serialversionuid; est utilisé pour identifier la version de la classe contrairement à ce qui est raconté partout, n importe quelle valeur peut-être employée... 16

Sérialisation «externe» Il existe un dernier mécanisme de sérialisation Java à grain fin la sérialisation externe La différence principale est que les objets doivent d abord exister avant d être désérialisés Ils sont d abrod créés via un constructeur sans arguments La (dé)sérialisation n offre pas de mécanisme par défaut 17

public class JunkTer implements Externalizable { private String str; private int age; public JunkTer() { System.out.println("Empty args ctor called"); str = ""; age = 0; public JunkTer(String s,int age) { str = s; this.age = age; public String tostring() { return str+"("+age+")"; public void writeexternal(objectoutput oo) throws IOException { System.out.println("Je contrôle la situation"); oo.writeint(age); oo.writeutf(str); public void readexternal(objectinput oi) throws IOException { System.out.println("Je contrôle la situation"); age = oi.readint(); str = oi.readutf(); 18

public class SerOutTer { public static void main(string[] args) throws Exception { JunkTer obj1 = new JunkTer("A",12); JunkTer obj2 = new JunkTer("B",13); JunkTer obj3 = new JunkTer("V",14); FileOutputStream fos = new FileOutputStream("JunkObjectsTer.bin"); ObjectOutputStream objectout = new ObjectOutputStream(fos); objectout.writeobject(obj1); objectout.writeobject(obj2); objectout.writeobject(obj3); System.out.println("obj1: " + obj1); System.out.println("obj2: " + obj2); System.out.println("obj3: " + obj3); objectout.close(); 19

public class SerInTer { public static void main(string[] args) throws Exception { int objectcount = 0; JunkTer object = null; FileInputStream fis = new FileInputStream("JunkObjectsTer.bin"); ObjectInputStream objectin = new ObjectInputStream(fis); while (objectcount < 3) { object = (JunkTer)objectIn.readObject(); objectcount++; System.out.println("Object n "+objectcount+": "+object); objectin.close(); 20

XML XML (extensible Markup Language) est un langage de description de données par balisage Il est très employé comme format pivot Java offre la sérialisation XML à travers ses beans (composants Java normalisés) 21

pas de public class JunkQuater { private String name; private int age; public JunkQuater() { System.out.println("Empty args ctor called"); setname(""); setage(0); public void setname(string n) { this.name = n; public String getname() { return name; public void setage(int a) { this.age = a; public int getage() { return age; public JunkQuater(String s,int age) { setname(s); setage(age); public String tostring() { return getname()+"("+getage()+")"; un ctor sans args des accesseurs 22

import java.beans.*; public class SerOutQuater { public static void main(string[] args) throws Exception { JunkQuater obj1 = new JunkQuater("A",12); JunkQuater obj2 = new JunkQuater("B",13); JunkQuater obj3 = new JunkQuater("V",14); FileOutputStream fos = new FileOutputStream("JunkObjects.xml"); XMLEncoder encoder = new XMLEncoder(fos); encoder.writeobject(obj1); encoder.writeobject(obj2); encoder.writeobject(obj3); System.out.println("obj1: " + obj1); System.out.println("obj2: " + obj2); System.out.println("obj3: " + obj3); encoder.close(); fos.close(); 23

import java.beans.*; public class SerInQuater { public static void main(string[] args) throws Exception { int objectcount = 0; JunkQuater object = null; FileInputStream fis = new FileInputStream("JunkObjects.xml"); XMLDecoder decoder = new XMLDecoder(fis); while (objectcount < 3) { object = (JunkQuater)decoder.readObject(); objectcount++; System.out.println("Object n "+objectcount+": "+object); decoder.close(); fis.close(); 24

<?xml version="1.0" encoding="utf-8"?> <java version="1.6.0_37" class="java.beans.xmldecoder"> <object class="junkquater"> <void property="age"> <int>12</int> </void> <void property="name"> <string>a</string> </void> </object> <object class="junkquater"> <void property="age"> <int>13</int> </void> <void property="name"> <string>b</string> </void> </object> <object class="junkquater"> <void property="age"> <int>14</int> </void> <void property="name"> <string>v</string> </void> </object> </java> 25

Un transfert d objet sur une liaison réseau Transfert via TCP Un object sérialisable Un serveur de réception (qui doit impérativement connaître la classe de l objet à désérialiser) Un client envoyant un objet au serveur 26

Un transfert d objet sur une liaison réseau public class Junk implements Serializable { private String str; private int age; public Junk(String s,int a) { str = s; age = a; public String tostring() { return str+" "+age; 27

Un transfert d objet sur une liaison réseau import java.net.*; public class ObjectSender { public static void main(string[] args) throws Exception { if (args.length<2) { System.err.println("usage: java ObjectSender name host"); System.exit(1); Junk obj1 = new Junk(args[0],12); Socket s = new Socket(argv[1],61234); ObjectOutputStream objectout = new ObjectOutputStream(s.getOutputStream()); objectout.writeobject(obj1); objectout.flush(); 28

Un transfert d objet sur une liaison réseau import java.net.*; public class ObjectReceiver { public static void main(string[] args) throws Exception { int objectcount = 0; ServerSocket ss = new ServerSocket(61234); while (true) { Socket service = ss.accept(); ObjectInputStream objectin = new ObjectInputStream(service.getInputStream()); Junk object = (Junk)objectIn.readObject(); objectcount++; System.out.println("Object n "+objectcount+": "+object); 29