325 votes

Qu'est-ce que InputStream et OutputStream? Pourquoi et quand les utilisons-nous?

Quelqu'un pourrait-il m'expliquer ce que sont InputStream et OutputStream ?

Je suis confus quant aux cas d'utilisation de InputStream et OutputStream.

Si vous pouviez également inclure un extrait de code pour accompagner votre explication, ce serait génial. Merci !

243voto

Chip Uni Points 4739

L'objectif de InputStream et OutputStream est d'abstraire différentes façons d'entrée et de sortie : que le flux soit un fichier, une page web, ou l'écran ne devrait pas importer. Tout ce qui importe c'est que vous recevez des informations du flux (ou envoyez des informations dans ce flux.)

InputStream est utilisé pour de nombreuses choses que vous lisez.

OutputStream est utilisé pour de nombreuses choses que vous écrivez.

Voici un exemple de code. Il suppose que les InputStream instr et OutputStream osstr ont déjà été créés :

int i;

while ((i = instr.read()) != -1) {
    osstr.write(i);
}

instr.close();
osstr.close();

59 votes

@KorayTugay Un flux est généralement défini comme un ensemble de caractères. Pour être plus précis, plus d'un bit ou caractère est appelé un flux.

18 votes

Plus d'un caractère est également une chaîne. Quelle est la différence entre un flux et une chaîne ?

1 votes

Je pense qu'un flux n'est que des zéros et des uns, pas des caractères.

95voto

Arne Points 6797

InputStream est utilisé pour la lecture, OutputStream pour l'écriture. Ils sont connectés en tant que décorateurs les uns aux autres de telle sorte que vous pouvez 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 l'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 au format ZIP).

13voto

Jakob Jenkov Points 304

Voici un tutoriel complet sur Java IO expliquant tout ce que vous devez savoir sur InputStream, OutputStream, Reader, Writer et les nombreuses autres classes de l'API Java IO.

http://tutorials.jenkov.com/java-io/index.html

9voto

pstanton Points 8807

Vous lisez à partir d'un InputStream et écrivez à un OutputStream.

par exemple, supposons que vous voulez copier un fichier. Vous créerait un FileInputStream pour lire à partir du fichier source et un FileOutputStream pour écrire dans le nouveau fichier.

Si vos données sont un flux de caractères, vous pourriez utiliser un FileReader au lieu d'un InputStream et un FileWriter au lieu d'un OutputStream si vous préférez.

InputStream input = ... // de nombreux types différents
OutputStream output = ... // de nombreux types différents

byte[] buffer = new byte[1024];
int n = 0;
while ((n = input.read(buffer)) != -1)
output.write(buffer, 0, n);

input.close();
output.close();

3 votes

fermer toujours vider, donc non.

0 votes

Qu'est-ce qu'un tampon ? et pourquoi est-il utilisé ? Comment ça marche ?

5voto

Kaleb Brasee Points 25776

OutputStream est une classe abstraite qui représente l'écriture de données. Il existe de nombreuses classes OutputStream différentes, et elles écrivent sur certains éléments (comme l'écran, des fichiers, des tableaux d'octets, des connexions réseau, etc.). Les classes InputStream accèdent aux mêmes éléments, mais lisent des données à partir d'eux.

Voici un bon exemple de base d'utilisation de FileOutputStream et FileInputStream pour écrire des données dans un fichier, puis les lire à nouveau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X