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(1):InputStream et OutputStream
____________________________________________________________________________________________________
Connexion

Java SE - Les entrées sorties(1): Les classes java.io.InputStream et java.io.OutputStream

Sommaire :

I) Généralités
II) La classe java.io.InputStream
   II-1) Les méthodes de lecture de java.io.InputStream
   II-2) Les méthodes de gestion du flux d'entrée
III) La classe java.io.OutputStream
   III-1) Les méthodes d'écriture de java.io.OutputStream
   III-2) Les méthodes de gestion du flux de sortie

I) Généralités

- Toutes les classes pour les entrées/sorties sont contenues dans le package java.io.
- Les classes fondamentales pour les flux d'octets, qui servent de classe mère aux autres, sont java.io.InputStream, ainsi que java.io.OutputStream. Ces deux classes sont abstraite.

II) La classe java.io.InputStream

C'est la classe mère de toutes les classes qui représentent un flux d'octets d'entrée. Elle est abstraite.

Javadoc de InputStream:
"This abstract class is the superclass of all classes representing an input stream of bytes.".
La seule méthode abstraite de InputStream est la méthode:
Javadoc de InputStream:"
Applications that need to define a subclass of InputStream must always provide a method that returns the next byte of input."

Cette méthode read lit le prochain octet du flux d'entrée. Et elle est bloquante.

Javadoc de InputStream:
"Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.".

C'est une utilisation classique des classes abstraites: la ou les méthodes spécifiques ne sont pas implémentées, comme la méthode surface d'une classe abstraite figure géométrique. Ici chaque flux d'entrée spécifique implémentera la façon dont on lit, pour son cas, le prochain octet dans le flux.

Toutes les autres méthodes sont communes quelque soit le flux d'entrée.

Le code source de InputStream est court. La classe implémente uniquement l'interface java.io.Closeable:

II-1) Les méthodes de lecture de java.io.InputStream

Elle lit le prochain octet du flux. Elle est bloquante.
Retourne -1 si aucun octet n'a pu être lu en raison de fin de flux.
Lit le nombre d'octets correspondant à la taille du tableau. Elle est bloquante. Effectue en réalité uniquement Retourne -1 si aucun octet n'a pu être lu en raison de fin de flux.
Comme la méthode précédente, mais plus générale. Bien sûr, elle est basée sur la méthode read(). Et elle effectue un for.
La javadoc de la méthode précise que les superclasses sont encouragées à redéfinir cette méthode afin de fournir une implémentation plus efficace.

II-2) Les méthodes de gestion du flux d'entrée

Passe le nombre d'octets passé en argument. Elle retourne le nombre d'octets qu'elle à pu passer.
Cette méthode utilise la méthode read(byte b[], int off, int len).
Retourne le nombre d'octets pouvant être lus sans bloquer, si on effectuait une lecture à ce moment-là. A noter que les superclasses doivent la redéfinir, car elle ne fait que retourner 0.

"This method should be overridden by subclasses"
Si le type de flux supporte le marquage ("mark/reset supported"), cette méthode retient la position courante du flux, pour pouvoir y retourner par un futur appel à la méthode reset.

La méthode marque est vide pour InputStream, car cette classe ne supporte pas le marquage.

Le paramètre readlimit : si plus de readlimit octets sont lus avant l'appel au reset, la classe n'est plus tenu de retenir le marquage.
Et le reset fera une IOException. C'est à dire que readlimit est la taille du plus grand retour en arrière possible.
Cette méthode est utilisable d'abord si le flux supporte le marquage.
Il faut ensuite que la méthode mark ait été appelé auparavant.
Cela effectue un retour, dans le stream, à la postion marquée.

La méthode reset de InputStream ne fait que déclencher l'IOException("mark/reset not supported").
Retourne true si le marquage est supporté, faux sinon.
Pour InputStream, cela retourne false.
Sert à fermer le flux. Le close de InputStream ne fait rien.

III) La classe java.io.OutputStream

Comme l'indique la javadoc, c'est la classe mère de toutes les classes représentant un flux d'octets de sortie.
Le code de la classe est encore plus court que celui de la classe java.io.InputStream .

III-1) Les méthodes d'écriture de java.io.OutputStream

Il s'agit d'une classe abstraite, avec une seule méthode abstraite:
écrit l'octet b dans le flux de sortie. Le paramètre est sur 32 bits, les 24 bits de poids le plus fort sont ignorés.
Il s'agit de la primitive de base, qui doit par conséquent être implémentée par chaque flux qui hérite de la classe mère.
Ecrit les len octets du tableau b( à partir de l'indice off) vers le flux de sortie.
L'implémentation de OutputStream de cette méthode se base sur la méthode write(int b).
La javadoc de la méthode précise que les superclasses sont encouragées à redéfinir cette méthode afin de fournir une implémentation plus efficace.
Ecrit b.length octets du tableau b vers le flux de sortie.
Effectue uniquement un:

III-2) Les méthodes de gestion du flux de sortie

Cette méthode concerne les types de flux où il y a une bufferisation de l'écriture des données. Elle permet d'écrire physiquement les octets qui restaient dans le buffer. Pour les flux de sortie qui sont une abstraction procurée par le système d'exploitation(par exemple un fichier), vider le buffer signifiera alors passer les données au système d'exploitation pour qu'il les écrive, qui ne les écrira pas forcément physiquement tout de suite.
Ferme le flux de sortie. Un flux de sortie fermé ne peut pas être réouvert.

RETOUR HAUT