0% ont trouvé ce document utile (0 vote)
4 vues34 pages

Flux et Sérialisation en Java

Le document traite des entrées/sorties (E/S) en Java, en expliquant les flux de données, les classes associées comme File, BufferedReader, et les méthodes de sérialisation. Il présente également des exemples de code pour lire et écrire des données, ainsi que pour sérialiser des objets. Enfin, il aborde les différents types de flux, notamment les flux par octet et par caractère.

Transféré par

adamsemlali40
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues34 pages

Flux et Sérialisation en Java

Le document traite des entrées/sorties (E/S) en Java, en expliquant les flux de données, les classes associées comme File, BufferedReader, et les méthodes de sérialisation. Il présente également des exemples de code pour lire et écrire des données, ainsi que pour sérialiser des objets. Enfin, il aborde les différents types de flux, notamment les flux par octet et par caractère.

Transféré par

adamsemlali40
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPT, PDF, TXT ou lisez en ligne sur Scribd

Plan

 Entrées / Sorties et flux


 Les différents types de Flux
 La classe File
 Lire et Ecrire ses objets (Sérialisation)

2
Entrée et Sortie standard

3
Exemple : lire une ligne sur l’entré
standard

4
Exemple : lire un entier tapé au clavier
BufferedReader fc = new BufferedReader
(new InputStreamReader([Link]));
String chaineLue = [Link](); Mode console

int i = [Link](chaineLue);

Depuis la version 5, on a aussi la classe Scanner :

Scanner sc = new Scanner([Link]);


int i = [Link]();
String chaineLue =
[Link](null,"Votre age ");
int i = [Link](chaineLue);

Mode Interface
[Link].*;
Objectifs des E/S (I/O)
 Communiquer avec le monde extérieur :
o Qui/Quoi ?
 Fichier sur le disque dur local, clavier, réseau, etc.
o Comment ?
 En binaire -en octet (byte), en caractère,
 Ligne par ligne, par mot, par caractère,
 Séquentiellement, random-acces, Buffer.

6
Objectifs des E/S (I/O)
Le concept de base est celui de flux : stream

7
Le package [Link]

 Le package [Link] regroupe les classes

pour les E/S


 Il se divise en 2 catégories
o E/S par Octet (byte) - 8-bit – Flot binaire
o E/S par Char - 16 bit Unicode- Flot de texte

8
E/S par Octet (byte) - 8-bit
 Les entrées (méthode read() ) :
o InputStream avec la méthode

public int read(byte[] b) throws IOException


 Les sorties (méthode write()) :
o OutputStream avec la méthode

public void write(byte[] b) throws IOException


 N’oublions pas la méthode close().

9
E/S par Octet (byte) - 8-bit

DataInputStream DataOutputStream

Toujours avec un Input/Output Stream


E/S par Char - 16 bit Unicode
 Les entrées (méthode read() ) :
o Reader avec la méthode

public int read(char[] b) throws IOException


 Les sorties (méthode write()) :
o Writer avec la méthode

public void write(char[] b) throws IOException


avec la méthode append() en plus
 N’oublions pas la méthode close().
11
E/S par Char - 16 bit Unicode

Toujours avec un Reader/Writer


12
E/S par Char - 16 bit Unicode

Toujours avec un Reader/Writer


13
Schéma de programmation
 Choisir son gestionnaire de flux :
o Basé sur des caractères : XxxReader/Writer
o Basé sur des octets : XxxInputStream/OutputStream

Ex : lire un fichier

c’est du texte : FileReader

c’est des octets : FileInputStream

Remarque : [Link] et [Link] = PrintStream


[Link] = InputStream
14
Schéma de programmation

 Choisir son gestionnaire de flux :


o Basé sur des caractères : XxxReader/Writer
o Basé sur des octets : XxxInputStream/OutputStream

15
Les types de Stream
 Un objet dérivant d’InputStream (OutputStream)
peut lire (écrire) à partir de différentes sources :

 Ces classes se généralisent pour l’écriture et pour les


Reader/Writer 16
Ex : copier un fichier textuel
import [Link].*;

public class Exemple1 {


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

// ouverture d'un flux d'entrée en char


FileReader fr = new FileReader("c:\\back1\\[Link]");

// ouverture d'un flux de sortie en char


FileWriter fw = new FileWriter("c:\\back1\\[Link]");
int c;

// lit caractère par caractère jusqu’à la fin, c en int


while ((c = [Link]()) != -1) [Link](c);

[Link]();
[Link]();
}
}
17
I/O de types primitifs
 Pour faire mieux que des caractères ou des octet,
utilisons : DataInputStream et DataOutputStream
 Ce sont des adaptateurs, ils se branchent sur les
InputStream et OutputStream
La liste des méthodes : readBoolean, readFloat,
readDouble, et available() pour voir les octets restantes
Le symétrique existe aussi pour l’écriture

18
Exemple de flux d’entrée
public class Exemple2 {
public static void main(String[] args) throws IOException {

int[] entiers = { 12, 8, 13, 29, 50 };


DataOutputStream dos = new DataOutputStream(new BufferedOutputStream
new FileOutputStream("c:\\back1\\[Link]")));

for (int i = 0; i < [Link]; i++) [Link](entiers[i]);

[Link](); //fermeture

DataInputStream dis = new DataInputStream(new BufferedInputStream(


new FileInputStream("c:\\back1\\[Link]")));

for (int i = 0; i < [Link]; i++) [Link]([Link]());

[Link](); //fermeture } } 19
Flux Buffered
 L’usage de flux Byte ou Character peuvent être
coûteux : ex : accès au disque dur, connexion réseau, ...
 Les flux bufferisés lisent les données par blocs :
Chargée en une fois dans la mémoire
Les buffers se branchent comme des convertisseurs sur
les flux standards :
BufferedReader br= new BufferedReader( new

FileReader("[Link]"));

BufferedWriter os = new BufferedWriter( new


20
FileWriter("[Link]"));
Entrées/Sorties et Exceptions

21
La classe File

22
Exemple de File
public class Exemple2 {
public static void main(String[] args) {
File dir = new File("C:\\windows\\
system32");

if([Link]()) {
String[] files = [Link]();

for(int i = 0; i<[Link]; i++){


if(files[i].endsWith("exe"))

[Link](files[i]);
}
}
} 23
Exemple de File

24
Sérialisation

La sérialisation consiste à écrire des données


présentes en mémoire vers un flux de données
binaires, ce procédé va permet de rendre nos objets
persistants. Ainsi il pourra être stocké sur un disque
dur ou transmis au travers d'un réseau pour le créer
dans une autre JVM (RMI, Beans, etc.).

25
Sérialisation
Pour pouvoir lire ou écrire un objet, la classe de cet objet doit
oimplémenter l’interface Serializable ou Externalizable.

L’interface Serializable sert à marquer le type de l’objet


comme candidat à la serialisation. Elle ne contient rien !
o L’interface Externalizable hérite de Serializable et permet
d’expliciter la manière de lire et d’écrire les objets (ex
compression, meta-données).
oSi un attribut est précédé du mot-clé transient, il n’est pas inclus
dans le processus de sérialisation 26
Les bases de la Sérialisation

27
Les bases de la Sérialisation

Pour sérialiser un objet,


1- instancier un type de OutputStream,
2. l’associer à un objet de type ObjectOutputStream.
3. Appeller la méthode writeObject( ),
et l’objet est sérialisé puis envoyé à l’OutputStream.

28
Les bases de la Sérialisation

L’opération est bien sûr reversible :


1. Instancier un InputStream
2. L’associer à un ObjectInputStream
3. Appeller la méthode readObject( ).
4. Récupérer l’Object en le faisant le castant (transtypage)

29
Exemple de Sérialisation
public class Personne implements Serializable {
private String nom;
private int age;
public Personne2(String nom, int age) {
[Link] = nom; [Link] = age; }
}
//getters et les setters
@Override
public String toString() {
return "Personne [nom=" + nom + ", age=" + age + "]";
}
}

30
Exemple de Sérialisation
public class TestSerializable {

public static void sauvegarder(Personne p) throws IOException

ObjectOutputStream oos = new ObjectOutputStream(new


FileOutputStream("c:\\back1\\[Link]"));
[Link](p);
[Link]();
}

public static Personne retourner() throws Exception {


Personne p;
ObjectInputStream ois = new ObjectInputStream(new
FileInputStream("c:\\back1\\[Link]"));
p = (Personne) [Link]();
[Link]();

return p;
}
31
}
Exemple de Sérialisation
public static void main(String[] args) {

Personne p = new Personne("p1",120);


try {

[Link](p);

Personne p = [Link]();

[Link](p2);

} catch (IOException e) {
[Link]();
}
}
}//fin du TestSerializable

32
Exemple de Sérialisation

33
Exemple de Sérialisation

34
Fin

35

Vous aimerez peut-être aussi