Classes JAVA pour la programmation réseau
RETOUR

Les flux (Streams)

Stream : Objet JAVA possédant la caractéristique de pouvoir envoyer ou recevoir des données

Java.io est le package dédié à la gestion des entrées/sorties. Il intègre des classes de gestion de fichier au sens classique du terme.

Outre ces classes, le package java.io possède un nombre important de classes dédiées à la gestion des flux de données.

Les classes de base de java.io sont :

1)InputStream pour gérer des données en entrée (lecture),

2)OutputStream pour gérer des données en sortie (écriture).

Ces deux classes abstraites ne sont pas utilisées directement mais plutôt comme intermédiaires vers des sous-classes correspondant mieux à la finalité désirée.

Ces autres classes de gestion de flux de java.io ont pour but de réaliser le formatage automatique des données (type de valeur, manière avec laquelle les données sont transmises, ...) vers le type le plus adapté à l'application souhaitée.

Exemple 1 : Lecture d'un fichier texte et affichage de son contenu à l'écran

BufferedReader dis = null ;
try {
  InputStream is =
    new FileInputStream("d:\\text.txt") ;
  dis = new BufferedReader(
      new InputStreamReader(is));
  String l ;
  try {
    while ( (l=dis.readLine())!=null ){
      System.out.println(l) ; }
    dis.close() ; }
  catch(IOException e) { } ; }
catch(FileNotFoundException e) {
  System.out.println(e) ; }

Exemple 2 : Ouverture d'une Socket et association d'un flux de sortie à cette socket

Socket s ;
String hote = "raphaello.univ-fcomte.fr" ;
int port = 5555 ;
try {
  s = new Socket(hote,port) ;
  OutputStream os = s.getOutputStream() ;
  DataOutputStream dos =
                new DataOutputStream(os) ;
  ...
  dos.close() ;}
catch ( UnknownHostException e) { } ;
catch ( IOException e) { } ;

Une fois les flux ouverts, il est possible d'utiliser toutes les fonctions disponibles pour le transfert des données désirées (variables simples, objets, ...)

Exemples de sous-classes de InputStream et OutputStream

BufferedReader : Lecture de texte depuis un flux d'entrée caractère -> caractères, tableaux et chaînes de caractères.

BufferedWriter : Ecriture de texte dans un flux de sortie caractère -> caractères, tableaux et chaînes de caractères.

DataInputStream : Lecture de données Java primitives.

DataOutputStream : Ecriture de données Java primitives.

FileInputStream : Lecture d'octets depuis un fichier.

FileOutputStream : Ecriture d'octets dans un fichier.

ObjectInputStream : Lecture d'objets Java par desérialisation.

ObjectOutputStream : Ecriture d'objets Java par sérialisation.

Les Threads

Thread : Objet JAVA possédant la caractéristique de pouvoir s'exécuter en parallèle au programme qui lui a donné naissance (processus léger)

Caractéristiques :

1)Gestion par le système de l'attribution des temps de calcul aux Threads en cours d'exécution

2)Partage de la même zone mémoire que le programme de naissance -> mémoire partagée

Ecriture d'une classe thread :

1)Extension de la classe java.lang.Thread

Surcharge de la méthode public void run() avec une fonction implantant l'équivalent de la fonction main pour un programme classique

2)Emploi d'une instance de classe thread :

Instanciation d'une variable de la classe étendant Thread

Exécution de la méthode start héritée de Thread

Exemple :

public class MyThread extends Thread {
  private boolean ok = true ;

  public void run() {
    while ( ok ) {
      ...
      }
    }

  public void arret() {
    ok = false ;
    }
  }

...
MyThread th = new Thread() ;
th.start() ;
...
th.arret() ;
...

Exécution de la méthode start héritée de Thread

Autre façon d'écrire des Threads

1)Implantation de l'interface Runnable dans une classe

-> Ecriture dune méthode public void run() implantant la fonction à exécuter quand le Thread est lancé par start