Qu'est-ce que InputStream Et Flux de Sortie? Pourquoi et quand les utilisons-nous?

que Quelqu'un m'explique ce que InputStream et OutputStream sont?

je suis confus au sujet des cas d'utilisation pour InputStream et OutputStream .

si vous pouviez aussi inclure un fragment de code pour accompagner votre explication, ce serait génial. Merci!

237
demandé sur mccoyLBI 2009-12-02 07:44:00

8 réponses

le but de InputStream et OutputStream est d'abstraire différentes façons d'entrer et de sortir: que le flux soit un fichier, une page web, ou l'écran ne devrait pas avoir d'importance. Tout ce qui importe est que vous recevez des informations du flux (ou envoyez des informations dans ce flux.)

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

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

En voici quelques-unes 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();
187
répondu Chip Uni 2017-08-27 11:25:27

InputStream est utilisé pour la lecture, OutputStream pour l'écriture. Ils sont connectés comme décorateurs les uns aux autres de sorte que vous pouvez lire/écrire tous les différents types de données à partir de tous les différents types de 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 have to implement Serializable
ObjectOutputStream stream = new ObjectOutputStream(
    new FileOutputStream("C:/text.obj"));
stream.writeObject(myObject);
stream.close();

vous pouvez lire 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 y a aussi un flux de sortie. Vous pouvez définir vos propres flux à la lecture / écriture des choses spéciales et il ya des flux complexes pour la lecture des choses complexes (par exemple, il ya des flux pour la lecture/écriture format ZIP).

83
répondu Arne Deutsch 2016-09-26 20:32:39

De la Java Tutoriel :

Un flux est une séquence de données.

un programme utilise un flux d'entrée pour lire les données d'une source, un élément à la fois:

enter image description here

un programme utilise un flux de sortie pour écrire des données à une destination, un élément à heure:

enter image description here

la source de données et la destination des données illustrées ci-dessus peuvent être tout ce qui détient, génère ou consomme des données. Évidemment cela inclut les fichiers de disque , mais une source ou une destination peut aussi être un autre programme, un périphérique, une socket de réseau, ou un tableau .

Échantillon code de l'oracle tutoriel:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyBytes {
    public static void main(String[] args) throws IOException {

        FileInputStream in = null;
        FileOutputStream out = null;

        try {
            in = new FileInputStream("xanadu.txt");
            out = new FileOutputStream("outagain.txt");
            int c;

            while ((c = in.read()) != -1) {
                out.write(c);
            }
        } finally {
            if (in != null) {
                in.close();
            }
            if (out != null) {
                out.close();
            }
        }
    }
}

ce programme utilise byte streams pour copier xanadu.txt fichier outagain.txt , en écrivant un octet à la fois

jetez un coup d'oeil à cette question pour en savoir plus sur les flux de caractères avancés, qui sont des enveloppes sur le dessus des flux Byte:

flux d'octets et de flux de caractères

25
répondu Ravindra babu 2017-06-17 02:19:10

vous lisez à partir d'un flux entrant et vous écrivez à un flux sortant.

par exemple, disons que vous voulez copier un fichier. Vous créeriez 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 pouvez utiliser un FileReader au lieu d'un InputStream et un FileWriter au lieu d'un OutputStream si vous préférez.

InputStream input = ... // many different types
OutputStream output = ... // many different types

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

input.close();
output.close();
9
répondu pstanton 2009-12-02 04:56:50

OutputStream est une classe abstraite qui représente la sortie d'écriture. Il existe de nombreuses classes de OutputStream différentes, et elles écrivent à certaines choses (comme l'écran, ou les fichiers, ou les tableaux de bytes, ou les connexions réseau, ou etc). Les classes InputStream accèdent aux mêmes choses, mais lisent des données à partir de celles-ci.

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

5
répondu Kaleb Brasee 2009-12-02 04:54:57

Un flux est un flux continu de liquide, d'air ou de gaz.

Java stream est un flux de données à partir d'une source ou vers une destination. La source ou la destination peut être un disque, une mémoire, une socket, ou d'autres programmes. Les données peuvent être des octets, des caractères ou des objets. Il en va de même pour les flux C# ou C++. Une bonne métaphore pour Java streams est l'eau qui s'écoule d'un robinet dans une baignoire et plus tard dans un drainage.

les données représente la partie statique du flux; les méthodes de lecture et d'écriture la partie dynamique du flux.

InputStream représente un flux de données à partir de la source, le OutputStream représente un flux de données vers la destination. Enfin, InputStream et OutputStream sont des abstractions sur l'accès de bas niveau aux données, comme les pointeurs de fichier C.

1
répondu Jan Bodnar 2018-01-12 18:01:04

un flux de sortie est généralement lié à une destination de données comme un fichier ou un réseau, etc. En java, le flux de sortie est une destination où les données sont éventuellement écrites et se termine

import java.io.printstream;

class PPrint {
    static PPrintStream oout = new PPrintStream();
}

class PPrintStream {
    void print(String str) { 
        System.out.println(str)
    }
}

class outputstreamDemo {
    public static void main(String args[]) {
        System.out.println("hello world");
        System.out.prinln("this is output stream demo");
    }
}
0
répondu Deep Arora 2017-06-24 15:42:23

Stream : en termes simples stream est des données , plus générique stream est une représentation binaire des données.

flux D'entrée : si vous lisez des données à partir d'un fichier ou de toute autre source , le flux utilisé est le flux d'entrée. En termes plus simples flux d'entrée agit comme un canal de lire les données.

flux de sortie : si vous voulez lire et traiter des données à partir d'une source (fichier etc) vous tout d'abord besoin d'enregistrer les données , le moyen de stocker des données est le flux de sortie .

0
répondu Sher Mohammad 2017-11-15 04:45:42