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(4):FilterInputStream et FilterOutputStream
____________________________________________________________________________________________________
Connexion

Les entrées-sorties(4) - Les filtres de flux binaires

Sommaire :

I)Généralités
II) La classe java.io.FilterInputStream
III) Liste des méthodes
IV) Conclusions sur FilterInputStream
V) La classe java.io.FilterOutputStream
VI) Liste des méthodes de FilterOutputStream

I)Généralités

Les classes de base pour les filtres de flux binaires sont
et
Ces deux classes représentent des filtres, qui s'appliquent à un flux d'entrée binaire ou un flux de sortie. Un tel filtre prend comme source de donnée le flux en question, et transforme les données ou ajoute de nouvelles fonctionnalités.

II) La classe java.io.FilterInputStream

La classe hérite directement de java.io.InputStream.
On remarque une propriété protected, appelée "in", et contenant le flux InputStream à filtrer.

Remarquons également un unique constructeur, qui prend le flux InputStream en paramètre, et qui affecte la propriété "in" avec celui-ci.

III) Liste des méthodes

On remarque que les méthodes sont toutes les méthodes de InputStream qui sont redéfinies. Leur implémentation est minimale, c'est-à-dire qu'elles ne font qu'appeler la méthode correspondante de l'objet flux de base(le "in"). Ceci va de soi, car FilterInputStream est la classe de base pour les filtres d'entrée d'octets, par conséquent le filtre ne fera rien.

IV) Conclusions sur FilterInputStream

On remarque de l'implémentation de FilterInputStream, que le filtre et le flux sous-jacent sont deux objets différents.
Deuxième remarque: le filtre est lui-même un flux d'entrée binaire( il hérite de InputStream, et ses méthodes appellent celles du flux sous-jacent). Il serait donc plus exact de nommé la classe "Flux d'entrée filtré", plutôt que filtre. Cependant il est vrai que ce n'est pas un vrai flux non plus, car il se sert d'un autre flux pour produire le flux de données.

Les classes qui hériteront de FilterInputStream n'auront qu'à implémenter les transformations qu'elles souhaitent, ainsi que les ajouts de fonctionnalités. Mais elles auront toutes en commun l'objet "in" en attribut, etc...

Remarquons qu'on construit un objet filtre à partir d'un objet flux. Le flux ne "filtre" pas lui-même les données, car la définition d'un flux, c'est d'être fidèle aux données du flux! C'est pour cette raison que les transformations et ajouts ne sont pas implémentées directement dans les classes de flux.

Autre question: pourquoi avoir mis le flux sous-jacent sous forme d'objet attribut? N'oublions pas que le "in" est un InputStream, ce qui signifie qu'il peut être de n'importe quelle classe héritant de la classe InputStream, ce peut même être un autre filtre! Le principe est de créer un nouveau flux, qui va utiliser les méthodes du flux de base.
Sans cette façon de faire, si on avait voulu faire un filtre simplement en héritant de la classe de flux qu'on veut filtrer, il aurait fallu réécrire les mêmes classes de filtres pour chaque classe de flux! Ici on peut appliquer notre filtre sur n'importe quel flux. On peut même appliquer un filtre sur un filtre, car un filtre est lui-même un InputStream!

V) La classe java.io.FilterOutputStream

Cette classe est similaire à FilterInputStream, mais pour les flux de sortie.

Son attribut, comparable au "in", est:
Elle possède ununique constructeur:

VI) Liste des méthodes de FilterOutputStream

Toutes les méthodes appellent la méthode correspondante du flux en question, sauf deux méthodes write, mais qui se servent de write(int b), qui elle fait uniquement out.write(b).
Elle utilise write(byte b[], int off, int len), donc write(int b).
Utilise write(int b).
IV) Conclusions sur FilterInputStream
V) La classe java.io.FilterOutputStream
VI) Liste des méthodes de FilterOutputStream

RETOUR HAUT