Skip Navigation Links
Accueil
Java Standard EditionExpand Java Standard Edition
Java EE 5Expand Java EE 5
Visual Basic .Net 2005Expand Visual Basic .Net 2005
Visual C++ .Net 2005Expand Visual C++ .Net 2005
Visual C# .Net 2005Expand Visual C# .Net 2005
Cours ASP .Net 2.0Expand Cours ASP .Net 2.0
PostgresqlExpand Postgresql
LinuxExpand Linux
Visual Studio 2008Expand Visual Studio 2008
ASP 3.0 ClassiqueExpand ASP 3.0 Classique
Cours Javascript - DOM - DHTMLExpand Cours Javascript - DOM - DHTML
Cours AjaxExpand Cours Ajax
VBAExpand VBA
AssembleurExpand Assembleur
PerlExpand Perl
MembresExpand Membres
L'auteur du site
Nouveautés sur le site
Contacts
Plan du site
Accueil > Java Standard Edition > E/S(10):Flux de caractères: InputStreamReader, OutputStreamWriter, StreamDecoder, StreamEncoder
____________________________________________________________________________________________________
Connexion

Les entrées/sorties(10): Flux de caractères: InputStreamReader, OutputStreamWriter, StreamEncoder, StreamDecoder

Sommaire :

I) Généralités
II) InputStreamReader(java.io) et StreamDecoder(sun.nio.cs)
III) OutputStreamWriter(java.io) et StreamEncoder(sun.nio.cs)
   III-1) OutputStreamWriter(java.io)
   III-2) StreamEncoder(sun.nio.cs)

I) Généralités

Les classes InputStreamReader et OutputStreamWriter sont des classes qui servent de pont entre les flux d'octets et les flux de caractères. Les flux de caractères n'existant pas nativement sur les ordinateurs(qui ne connaissent que les flux d'octets), il est normal qu'on ait besoin de ponts entre les deux types de flux.

InputStreamReader et OutputStreamWriter fonctionnent sur le même principe.
Toutes deux possèdent un attribut privé de type StreamEncoder ou StreamDecoder, qui héritent de Reader ou Writer. Ce StreamEncoder ou StreamDecoder est construit à partir du flux d'octets d'entrée ou de sortie d'origine.

Nous ne détaillerons pas trop le principe de InputStreamReader et de StreamDecoder, qui sont basés sur le modèle de OutputStreamWriter et StreamEncoder, qui ont déjà été expliqués en détail.

II) InputStreamReader(java.io) et StreamDecoder(sun.nio.cs)

La classe InputStreamReader hérite de Reader. C'est en réalité un filtre car elle lit à partir d'un flux binaire sous-jacent. Tout est basé sur la classe sun.nio.cs.StreamDecoder, qui hérite de Reader. StreamDecoder permet, elle, de décoder un flux binaire sous-jacent, c'est elle qui fait vraiment le travail. C'est elle-même un filtre sans le dire, car elle travaille à partir des données d'un flux binaire d'entrée sous-jacent. On peut avoir l'impression de double emploi entre la classe StreamDecoder et InputStreamReader, car elles font la même chose! Cependant StreamDecoder contient l'implémentation même du décodage des octets en caractères(suivant le jeu de caractères utilisé), alors que InputStreamReader ne contient aucune implémentation à ce sujet. Le code de InputStreamReader est donc beaucoup plus lisible, et dégagé de cet implémentation complexe.
De plus, InputStreamReader est indépendant de l'implémentation utilisée pour résoudre de problème( il utilise juste un décodeur). Le concept associé à StreamDecoder est de décoder un flux binaire, tandis que la notion associée à InputStreamReader est de passer d'un flux binaire à un flux de caractères.

Revenons à InputStreamReader: elle a le même modèle que OutputStreamWriter, donc nous n'y reviendrons pas en détail.
Ses quatre constructeurs demandent chacun un InputStream. Le principe est de se créer un objet StreamDecoder, qu'on utilisera à chaque fois comme un simple Reader. Seulement ce Reader lira à partir du InputStream.

Pour le détail de InputStreamReader et StreamDecoder, voyez les explications suivantes sur OutputStreamWriter et StreamEncoder.

III) OutputStreamWriter(java.io) et StreamEncoder(sun.nio.cs)

Nous avons vu ces classes à l'occasion des flux d'octets

III-1) OutputStreamWriter (java.io) (lien vers autre page)

III-2) StreamEncoder (sun.nio.cs) (lien vers autre page)


RETOUR HAUT