• Aucun résultat trouvé

– permet de transmettre des objets sur le réseau

N/A
N/A
Protected

Academic year: 2022

Partager "– permet de transmettre des objets sur le réseau "

Copied!
15
0
0

Texte intégral

(1)

Sérialisation : introduction

Ahcène Bounceur

(2)

Intérêt

• Traduit un objet en un flot d’octets

– permet de transmettre des objets sur le réseau

• Permet de rendre des objets persistants

– quand l’application se termine elle sauve dans un fichier certains objets

– quand elle est relancée, elle relit ces objets précédemment sauvegardés

Mémoire

OBJET

sérialisation

désérialisation

fichier .ser

(3)

Introduction

Sérialisation binaire

Permet de rendre des objets persistants en

écrivant les données présentes en mémoire vers un flux de données binaires

introduction dans le JDK 1.1 d'un mécanisme de sérialisation

permet de sérialiser les objets de manière transparente et indépendante du système d'exploitation.

S'appuie sur les flux d'entrée sortie (java.io)

(4)

Introduction

<interface>

Serializable

Permet d'identifier les classes

sérialisables Object

OutputStream InputStream

ObjectOutputStream ObjectInputStream

Implémente le mécanisme de sérialisation

Implémente le mécanisme

de désérialisation

(5)

Interface sérialisable

• Pour qu'un objet puisse être sérialisé il faut que sa classe implémente l'interface Serializable ou hériter d'une classe elle-même sérialisable.

• La sérialisation d'un objet consiste à écrire ses attributs sur un flux de sortie binaire.

• Tout attribut est sérialisé si :

– Il est de type primitif (int, char, boolean, ….) ou est une

référence dont le type est un type sérialisable (dans ce cas l'objet référencé est sérialisé)

– Il n'est pas déclaré static

– Il n'est pas déclaré transient

– Il n'est pas hérité d'une classe mère sauf si celle-ci est elle-

même sérialisable

public interface Serializable { }

Interface qui ne contient ni attributs ni méthode. Interface de marquage (tag

interface)

(6)

Classes ObjectOutputStream et ObjectInputStream (1/2)

ObjectOutputStream représente "un flux objet" qui permet de sérialiser un objet grâce à la méthode writeObject()

ObjectInputStream représente "un flux objet" qui permet de désérialiser un objet

grâce à la méthode readObject()

(7)

Ne pas oublier : Les exceptions

• private void

readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException

• private void

writeObject(ObjectOutputStream

stream) throws IOException

(8)

Classes ObjectOutputStream et ObjectInputStream (2/2)

Objet de Class C

Méthode writeObject() de ObjectOutputStream

Méthode readObject() de ObjectInputStream

10011010110101…

Objet sérialisé

Cast vers type C

Objet de

Class C

(9)

Exemple 1 (1/3)

import java.io.Serializable;

public class A implements Serializable { private int v = 10 ;

private String s ;

public A(int v, String s) { this.v = v ;

this.s = s ; }

public float getV() { return v ;

}

public String getS() { return s ;

} }

(10)

Exemple 1 (2/3)

import java.io.ByteArrayOutputStream;

import java.io.FileOutputStream;

import java.io.ObjectOutputStream;

public class TestSerial {

public static void main(String[] args) throws Exception { A objA = new A(35,"salut");

FileOutputStream fos = new FileOutputStream("objeta.ser");

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(objA);

} }

Le fichier objeta.ser est créé sur le disque dur

(11)

Exemple 1 (3/3)

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.ObjectInputStream;

public class TestSerialLecture {

public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("objeta.ser"));

A a = (A)(ois.readObject()) ; System.out.println(a.getV());

System.out.println(a.getS());

} }

35

salut

Console :

(12)

Exemple 2 (1/3)

import java.io.Serializable;

public class A implements Serializable { private transient int v = 10 ;

private String s ;

public A(int v, String s) { this.v = v ;

this.s = s ; }

public float getV() { return v ;

}

public String getS() { return s ;

} }

(13)

Exemple 2 (2/3)

import java.io.ByteArrayOutputStream;

import java.io.FileOutputStream;

import java.io.ObjectOutputStream;

public class TestSerial {

public static void main(String[] args) throws Exception { A objA = new A(35,"salut");

FileOutputStream fos = new FileOutputStream("objeta.ser");

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(objA);

} }

Le fichier objeta.ser est créé sur le disque dur

(14)

Exemple 2 (3/3)

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.ObjectInputStream;

public class TestSerialLecture {

public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("objeta.ser"));

A a = (A)(ois.readObject()) ; System.out.println(a.getV());

System.out.println(a.getS());

} }

0

salut

Console :

(15)

Questions

Références

Documents relatifs

[r]

[r]

[r]

– la pertinence subjective des informations, c'est-à-dire l'utilité de leur contenu pour les activités de l'organisation, telle qu'elle est perçue par le portier... IV.3.3 Canaux

✓ On trace un rayon incident parallèle à l’axe, il ressort en passant par le foyer image pour aller former l’image sur l’écran. Le défaut entraine une différence de

Q 2 Il écrit ensuite sur une même ligne la suite croissante S 2 des n entiers naturels consécutifs en partant de l'entier 1 auquel il affecte le signe &#34;+&#34; puis il

Un joueur qui dit &#34;je ne sais pas&#34; indique que toutes les formes présentes une seule fois dans son tableau quant à son paramètre personnel ne conviennent pas (car sinon,

Pour le calcul de K(n,k), on passera par celui de P(n,k), nombre de mots de longueur n écrits avec au plus k lettres, tels que deux lettres adjacentes soient toujours différentes