| 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
|