next up previous contents index
Next: Fichiers Up: Patterns Previous: Un pattern de délégation

   
Les flots

      Les entrées et les sorties sont organisées en Java autour du modèle des flots  (anglais stream), à l'aide d'un ensemble très développé de types, mettant en \oeuvre divers patterns. Un flot est une suite de données (octets, caractères, objets quelconques) successivement lues ou écrites. Ces flots sont ainsi classifiés en flots d'entrée (qui comportent des méthodes de lecture), et en flots de sortie (qui comportent des méthodes d'écriture). Outre le programme, un flot d'entrée est connecté à une source, et un flot de sortie à une cible. La source ou la cible d'un flot peut être un fichier, un tampon en mémoire, une chaîne de caractères, un autre flot, une ressource Web ou bien un port Internet. Un type de flot est donc caractérisé par trois éléments : le type des données, sa direction et sa connectivité.

Les flots les plus élémentaires sont des flots d'octets. Les classes des flots d'octets en écriture ont un nom en ...OutputStream ; celles des flots d'octets en lecture ont un nom en ...InputStream. Pour travailler avec des flots de caractères Unicode, on utilisera des classes en ...Writer (en écriture) et ...Reader (en lecture). Toutes ces classes font partie du paquet java.io  ; les unités de compilation faisant appel à ces classes commenceront donc, par commodité, par :

import java.io.*;

Les méthodes générales de lecture sur un flot d'octets, déclarées dans la classe abstraite InputStream  sont :

Les méthodes générales d'écriture sur un flot d'octets, déclarées dans la classe abstraite OutputStream , sont :

Comme premier exemple d'utilisation de ces méthodes, la procédure suivante lit sur un flot d'octets in, octet par octet, et les écrit sur un flot d'octets out ; on notera que les types des paramètres sont abstraits :

  static void copier(InputStream in, OutputStream out)
    throws IOException {
    int c;
    while ((c = in.read()) != -1) out.write(c);
  }

En l'absence de récupération de l'exception IOException , cette procédure doit déclarer qu'elle est susceptible de déclencher (c'est-à-dire de propager) cette exception. Une autre façon d'écrire cette itération est la suivante :

    int c = in.read();
    while (c != -1) {
      out.write(c);
      c = in.read();
    }

Toute application peut accéder aux flots standards d'entrée System.in  (de type InputStream, connecté par défaut au clavier), de sortie System.out  et de sortie d'erreur System.err  (tous deux de type PrintStream, sous-type de OutputStream, et connectés par défaut à l'écran). La procédure copier() peut servir à recopier du clavier à l'écran les caractères tapés par l'utilisateur :

    copier(System.in, System.out);


next up previous contents index
Next: Fichiers Up: Patterns Previous: Un pattern de délégation
R. Lalement
2000-10-23