human
Je suis confus au sujet des cas d'utilisation à la fois pour ```InputStream``` et ```OutputStream```.
Veuillez inclure un extrait de code pour accompagner votre explication
gpt
InputStream est utilisé pour la lecture, OutputStream pour l'écriture. Ils sont connectés en tant que décorateurs l'un à l'autre de sorte que vous puissiez lire/écrire tous les différents types de données à partir de toutes les différentes sources.
Par exemple, vous pouvez écrire des données primitives dans un fichier :
```File file = new File("C:/text.bin");
file.createNewFile();
DataOutputStream stream = new DataOutputStream(new FileOutputStream(file));
stream.writeBoolean(true);
stream.writeInt(1234);
stream.close();
```
Pour lire le contenu écrit :
```File file = new File("C:/text.bin");
DataInputStream stream = new DataInputStream(new FileInputStream(file));
boolean isTrue = stream.readBoolean();
int value = stream.readInt();
stream.close();
System.out.printlin(isTrue + " " + value);
```
Vous pouvez utiliser d'autres types de flux pour améliorer la lecture/écriture. Par exemple, vous pouvez introduire un tampon pour plus d'efficacité :
```DataInputStream stream = new DataInputStream(
    new BufferedInputStream(new FileInputStream(file)));
```
Vous pouvez écrire d'autres données telles que des objets :
```MyClass myObject = new MyClass(); // MyClass doit implémenter Serializable
ObjectOutputStream stream = new ObjectOutputStream(
    new FileOutputStream("C:/text.obj"));
stream.writeObject(myObject);
stream.close();
```
Vous pouvez lire à partir d'autres sources d'entrée différentes :
```byte[] test = new byte[] {0, 0, 1, 0, 0, 0, 1, 1, 8, 9};
DataInputStream stream = new DataInputStream(new ByteArrayInputStream(test));
int value0 = stream.readInt();
int value1 = stream.readInt();
byte value2 = stream.readByte();
byte value3 = stream.readByte();
stream.close();
System.out.println(value0 + " " + value1 + " " + value2 + " " + value3);
```
Pour la plupart des flux d'entrée, il existe également un flux de sortie. Vous pouvez définir vos propres flux pour lire/écrire des choses spéciales et il existe des flux complexes pour lire des choses complexes (par exemple, il existe des flux pour lire/écrire le format ZIP).