Chapitre1 Streams
Chapitre1 Streams
Introduction
• A striking observation that can be made when looking at
functional networking applications is how little code is
dedicated to the networking aspects themselves.
I/O Streams
• To a large extent, reading data sent by a server is no different
at all from reading from a file.
• Sending a text to a client isn't much different from writing to
a file.
• I/O in Java is based on the notion of Streams.
• A stream is an ordered sequence of bytes.
• We can think of a stream as a data structure that allows
reading or writing sequentially without the possibility of
backtracking.
Un Stream d’Entrée est une source de données
I/O Streams
• Input streams read data; output streams write data.
Byte Streams
Example - Reading and Writing Bytes :
// Reading from an InputStream
InputStream inStream = new FileInputStream("input.txt");
int byteData;
while ((byteData = inStream.read()) != -1) {
// Process byteData
}
CHAPTER 1 : JAVA I/O STREAMS
Byte Streams
// Writing to an OutputStream
OutputStream outStream = new FileOutputStream("output.txt");
byte[] dataToWrite = "Hello, World!".getBytes();
outStream.write(dataToWrite);
outStream.close();
CHAPTER 1 : JAVA I/O STREAMS
Character Streams
Example - Reading and Writing Characters :
// Reading from a Reader
Reader lire = new FileReader("input.txt");
int charData;
while ((charData = lire.read()) != -1) {
// Process charData
}
CHAPTER 1 : JAVA I/O STREAMS
Byte Streams
// Writing to a Writer
Writer ecrire = new FileWriter("output.txt");
String textToWrite = "Hello, World!";
ecrire.write(textToWrite);
ecrire.close();
CHAPTER 1 : JAVA I/O STREAMS
I/O Streams
• Les readers et writers peuvent être chainés aux input et output
streams pour permettre aux programmes de lire ou écrire du texte
(c.à.d. cacarctères) plutôt que des bytes.
I/O Streams
• Les Filter streams peuvent être chainés soit à un input stream soit à
un output stream.
Character Streams
• La plate-forme Java stocke les valeurs des caractères en utilisant les conventions
Unicode. L'entrée/sortie de character streams traduit automatiquement ce
format interne depuis et vers le jeu de caractères local.
• Les streams de caractères sont souvent des "enveloppes" pour les byte streams.
Le stream de caractères utilise le byte stream pour effectuer les E/S physiques,
tandis que le stream de caractères gère la traduction entre les caractères et les
bytes.
try {
inStream = new FileReader("xanadu.txt");
outStream = new FileWriter("characteroutput.txt");
int c;
while ((c = inStream.read()) != -1) {
outStream.write(c);
}
} finally {
if (inStream != null) {
inpStream.close();
}
if (outStream != null) {
outStream.close();
} } }}
CHAPTER 1 : JAVA I/O STREAMS
I/O Streams
• Les entrées/sorties de caractères se font généralement par unités plus
grandes que les caractères individuels. Une unité commune est la
ligne : une chaîne de caractères avec un terminateur de ligne à la fin.
String l;
while ((l = inStream.readLine()) != null) {
outStream.println(l);
}
} finally {
if (inStream != null) {
inStream.close();
}
if (outStream != null) {
outStream.close(); } } }}
CHAPTER 1 : JAVA I/O STREAMS
Streams
• La plupart des exemples que nous avons vus jusqu'à présent utilisent des E/S
non tamponnées. Cela signifie que chaque demande de lecture ou d'écriture est
traitée directement par le système d'exploitation sous-jacent.
• Cela peut rendre un programme beaucoup moins efficace, car chacune de ces
demandes déclenche souvent un accès au disque, une activité réseau ou une
autre opération relativement coûteuse.
• Pour réduire ce type de surcharge, la plate-forme Java met en œuvre des flux
d'E/S tamponnés. Les flux d'entrée tamponnés lisent les données d'une zone de
mémoire appelée tampon.
• l'API d'entrée native n'est appelée que lorsque le tampon est vide. De même,
les flux de sortie tamponnés écrivent des données dans un tampon, et l'API de
sortie native n'est appelée que lorsque le tampon est plein.
CHAPTER 1 : JAVA I/O STREAMS
Streams
• Les data streams prennent en charge l'E/S binaire des valeurs de type
de données primitives (booléen, char, octet, court, int, long, flottant
et double) ainsi que les valeurs de type String.
// DataStreams writes out the records and closes the output stream.
double price;
int unit;
String desc;
double total = 0.0;
// Maintenant, les DataStreams peuvent lire chaque enregistrement du stream, en faisant un rapport sur les données qu'ils
rencontrent.
try {
while (true) {
price = in.readDouble();
unit = in.readInt();
desc = in.readUTF();
System.out.format("You ordered %d" + " units of %s at $%.2f%n",
unit, desc, price);
total += unit * price;
}
} catch (EOFException e) { }
CHAPTER 1 : JAVA I/O STREAMS
I/O Streams
• Tout comme les streams de données supportent les E/S de types de données
primitifs, les streams d'objets supportent les E/S d'objets.
• La plupart des classes standard, mais pas toutes, prennent en charge la sérialisation
de leurs objets. Celles qui le font implémentent l'interface de marquage Serializable.
• Cela signifie que toutes les méthodes d'E/S de données primitives couvertes dans
Data Streams sont également implémentées dans les flux d'objets.
Method Description
Method Description
The stream you use can be one that you’ve opened, as here, or one you inherited: