0% ont trouvé ce document utile (0 vote)
3 vues12 pages

Flux de Fichiers en Java 8

Le document présente les concepts de flux (stream) en Java, en détaillant les classes InputStream et OutputStream pour la gestion des données en entrée et en sortie. Il aborde également les filtres pour modifier les flux, ainsi que les flux de caractères pour la gestion de l'internationalisation. Enfin, il mentionne les différentes implémentations de flux disponibles, comme ByteArrayInputStream et FileInputStream.

Transféré par

abdoulayeaw1989
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 PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues12 pages

Flux de Fichiers en Java 8

Le document présente les concepts de flux (stream) en Java, en détaillant les classes InputStream et OutputStream pour la gestion des données en entrée et en sortie. Il aborde également les filtres pour modifier les flux, ainsi que les flux de caractères pour la gestion de l'internationalisation. Enfin, il mentionne les différentes implémentations de flux disponibles, comme ByteArrayInputStream et FileInputStream.

Transféré par

abdoulayeaw1989
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 PDF, TXT ou lisez en ligne sur Scribd

Java - Cours 8

Input / Output

Julien Iguchi-Cartigny

Université de Limoges

28 janvier 2010

J. Iguchi-Cartigny (Univ. Limoges) Java (8) Version 0.1 1 / 13


Notion de stream
Idée
Avoir le même modèle de programmation quelque soit :
la source ou la destination
le type des données transportés

Notions
Idée de flux (stream)
représente une séquence de données
directionnel : en entrée (input) ou en sortie (output)
Représentation abstraite vers une multiude de source ou destination :
I fichier
I communication par réseau
I communication entre différent thread
I un tableau en mémoire
I ...
Adaptable pour plusieurs type de données : primitifs ou données complexes
J. Iguchi-Cartigny (Univ. Limoges) Java (8) Version 0.1 2 / 13
Byte Stream I

Présentation
flux de données en 8 bits
en entrée InputStream ou en sortie OutputStream

API [Link]
public abstract class InputStream {
public InputStream () ;
int available () ; // available byte for read without blocking
void close () ;
abstract int read () ; // return character value or -1 if nothing
int read ( byte [] b ) ;
int read ( byte [] b , int off , int len ) ;
long skip ( long n ) ; // skip over and discards n bytes
void reset () ; // reset to mark position (0 if no mark )
void mark () ;
boolean markSupported () ;
}

J. Iguchi-Cartigny (Univ. Limoges) Java (8) Version 0.1 3 / 13


Byte Stream II

API [Link]
public abstract class OutputStream {
public OutputStream () ;
void close () ;
abstract void write ( int b ) ;
void write ( byte [] b ) ;
void write ( byte [] b , int off , int len ) ;
void flush () ;
}

J. Iguchi-Cartigny (Univ. Limoges) Java (8) Version 0.1 4 / 13


Byte Stream III
Exemple
public class CopyBytes {
public static void main ( String [] args ) throws IOException {
InputStream in = null ;
OutputStream out = null ;
try {
in = new FileInput St r ea m ( " xanadu . txt " ) ;
out = new FileOut p u t S t r e a m ( " outagain . txt " ) ;
int c ;
while (( c = in . read () ) != -1) {
out . write ( c ) ;
}
} finally {
if ( in != null ) {
in . close () ;
}
if ( out != null ) {
out . close () ;
}
}
}
}

Source : IO trails ( c Sun Microsystems)

J. Iguchi-Cartigny (Univ. Limoges) Java (8) Version 0.1 5 / 13


Plan

ByteArrayInputStream

FileInputStream InputStream PipedInputStream

FilterInputStream

BufferedInputStream DeflaterInputStream

CipherInputStream InflaterInputStream

DataInputStream

J. Iguchi-Cartigny (Univ. Limoges) Java (8) Version 0.1 6 / 13


Implémentation de sources

ByteArrayInputStream
Flux de lecture sur un tableau d’octets
InputStream is = new ByteArrayInputStream(new byte[200]);

FileInputStream
Flux de lecture à partir d’un fichier
InputStream is = new FileInputStream("[Link]");

PipedInputStream
Connecté à un PipedOutputStream
permet à deux threads de communiquer
OutputStream os = new P i p e d O u t p u t S t r e a m () ;
InputStream is = new P i p e d I n p u t S t r e a m ( os ) ;

J. Iguchi-Cartigny (Univ. Limoges) Java (8) Version 0.1 7 / 13


Notion de filtre I

Besoins
Nécessité d’appliquer des modifications sur un flux :
formatage des données
compression / décompression
opérations cryptographiques (chiffrement, signature)
bufferisation des données

Idée : appliquer une suite de filtre utilisable de la même façon qu’un InputStream

InputStream Filter 1 Filter 2 Filter 3 Client

J. Iguchi-Cartigny (Univ. Limoges) Java (8) Version 0.1 8 / 13


Notion de filtre II
Le pattern Decorator
Les constructeurs des filtres prennent en paramètres la source (ou la
destination) à partir duquel (ou vers lequel) ils vont manipuler le flux

Exemple
Cipher cipher = // initialize somewhere else ...

Fil eI n pu tStre am fis = new F il eI np u tS tr ea m ( " test . zip " ) ;


D e f l a t e r I n p u t S t re a m dis = new D e f l a t e r I n p u t S t r e a m ( fis ) ;
Ci p h e r I n put S tr e am cis = new C i p h e r I n p u t S t r e a m ( is , cipher ) ;
B u f f e r e d I n p u t S t re a m bis = new B u f f e r e d I n p u t S t r e a m ( cis ) ;

InputStream is ( InputStream ) bis ;

// readint with a buffer to the first 100 characters of a compressed and


// encrypted file
byte [] ba = new byte [100];
is . read ( ba ) ;

J. Iguchi-Cartigny (Univ. Limoges) Java (8) Version 0.1 9 / 13


Implémentation de filtres disponibles
BufferedInputStream
Bufferisation des données en entrée (pour éviter un accès à chaque lecture)

CipherInputStream
Déchiffrement ou déchiffrement des données en entrée

DataInputStream
Formatage des données, possibilité de lire les données comme des types primitifs
(int, double, boolean. . . )
InputStream is = // somewhere else
D at aI n pu tStre am dis = new D at aI np u tS tr ea m ( is ) ;
boolean a = dis . readBoolean () ;
int b = dis . readInt () ;
float c = dis . readFloat () ;

InflaterInputStream et DeflaterInputStream
Compression et décompression des données en entrée
J. Iguchi-Cartigny (Univ. Limoges) Java (8) Version 0.1 10 / 13
Flux de charactères

Gestion de l’internatinalisation
Nécessité de gérer des caractères complexes sous un format d’encodage
particulier
exemple : un caractère UTF-8 peut faire une taille de 1 à 4 caractères selon
la langue, mais nous voulons le manipuler comme un char

Nouvel ensemble disponible


Deux nouveaux mécanismes de flux pour les fichiers texte
Reader (équivalence : InputStream)

Writer (équivalence : OutputStream)

il existe des classes passerelles pour transformer un flux Reader (Writer) en un


flux InputStream (OutputStream), et vice-versa.

J. Iguchi-Cartigny (Univ. Limoges) Java (8) Version 0.1 11 / 13


Plan

FilterReader BufferedReader StringReader

Reader

CharArrayReader PipedReader InputStreamReader

J. Iguchi-Cartigny (Univ. Limoges) Java (8) Version 0.1 12 / 13

Vous aimerez peut-être aussi