Leçon 44 : Flux d'entrée et de sortie
L'I/O de Java est basé sur le concept de flux (streams), qui représentent une séquence de données circulant d'une source (Input Stream) vers une destination (Output Stream).
1. Flux d'octets (Byte Streams)
- Gèrent les données binaires brutes (ex: images, sons, objets sérialisés).
- Classes de base :
InputStream(lecture) etOutputStream(écriture). - Classes concrètes :
FileInputStream,FileOutputStream.
java // Exemple : Copie de données octet par octet (inefficace, pour illustration) try (InputStream input = new FileInputStream("source.dat"); OutputStream output = new FileOutputStream("target.dat")) {
int data;
while ((data = input.read()) != -1) { // Lit un octet
output.write(data);
}
} catch (IOException e) { // Gérer l'exception }
2. Flux de caractères (Character Streams)
- Gèrent les données textuelles (caractères), en utilisant un encodage comme UTF-8 ou ASCII.
- Classes de base :
Reader(lecture) etWriter(écriture). - Classes concrètes :
FileReader,FileWriter.
java // Exemple : Lecture de texte try (Reader reader = new FileReader("config.txt")) { int charCode; while ((charCode = reader.read()) != -1) { System.out.print((char) charCode); } } catch (IOException e) { /* ... */ }
3. Flux mis en mémoire tampon (Buffered Streams) et patron de conception Decorator
Pour améliorer les performances, les flux sont souvent enveloppés dans des flux mis en mémoire tampon. La mise en mémoire tampon lit de gros blocs de données du disque en une seule fois, réduisant ainsi les opérations d'I/O.
BufferedReader/BufferedWriter(Caractère)BufferedInputStream/BufferedOutputStream(Octet)
java // Utilisation d'un BufferedReader pour lire efficacement des lignes de texte try (BufferedReader br = new BufferedReader(new FileReader("large.txt"))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e) { /* ... */ }
Try-with-Resources (Crucial) : Remarquez l'utilisation de la syntaxe try ( ... ). Cela garantit que les flux sont automatiquement et sûrement fermés, même si une exception se produit.