Was ist InputStream und OutputStream? Warum und wann verwenden wir sie?

Lesezeit: 5 Minuten

Benutzer-Avatar
Bohemien

Jemand erklärt mir was InputStream und OutputStream sind?

Ich bin verwirrt über die Anwendungsfälle für beide InputStream und OutputStream.

Wenn Sie auch ein Code-Snippet zu Ihrer Erklärung hinzufügen könnten, wäre das großartig. Vielen Dank!

Benutzer-Avatar
Chip Uni

Das Ziel von InputStream und OutputStream ist es, verschiedene Arten der Ein- und Ausgabe zu abstrahieren: Ob der Stream eine Datei, eine Webseite oder der Bildschirm ist, sollte keine Rolle spielen. Alles, was zählt, ist, dass Sie Informationen aus dem Stream erhalten (oder Informationen in diesen Stream senden).

InputStream wird für viele Dinge verwendet, aus denen Sie lesen.

OutputStream wird für viele Dinge verwendet, zu denen Sie schreiben.

Hier ist ein Beispielcode. Es geht davon aus InputStream instr und OutputStream osstr wurden bereits erstellt:

int i;

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

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

  • @KorayTugay Ein Stream wird im Allgemeinen als eine Reihe von Zeichen definiert. Genauer gesagt werden mehr als ein Bit oder Zeichen als Stream bezeichnet.

    – Gowham

    28. Juli 2014 um 15:21 Uhr

  • Auch mehr als ein Zeichen ist String. Was unterscheidet Stream von String?

    – Prajeet Shrestha

    24. Mai 2018 um 5:07 Uhr

  • Ich denke, ein Stream besteht nur aus Nullen und Einsen, nicht aus Zeichen.

    – Smiley

    23. September 2019 um 17:19 Uhr

  • @PrajeetShrestha Ich denke, ein Stream hat auch die Implikation, dass Daten die Daten sequentiell verfügbar sind (kein wahlfreier Zugriff) und nicht persistent sind (geschriebene Daten können nicht erneut gelesen oder geändert werden). Die Daten sind möglicherweise auch nicht verfügbar, wenn sie angefordert werden. ZB wenn über ein Netzwerk gestreamt wird.

    – SteveMellross

    16. Juli 2020 um 2:50 Uhr

  • Stream-Daten bedeutet, dass die Daten im Binärformat dargestellt werden. dh 0 und 1

    – Fred Kibuchi

    18. Januar 2021 um 21:16 Uhr

Benutzer-Avatar
Arn Deutsch

InputStream wird zum Lesen verwendet, OutputStream zum Schreiben. Sie sind als Decorators miteinander verbunden, so dass Sie alle Arten von Daten aus allen Arten von Quellen lesen/schreiben können.

Sie können beispielsweise primitive Daten in eine Datei schreiben:

File file = new File("C:/text.bin");
file.createNewFile();
DataOutputStream stream = new DataOutputStream(new FileOutputStream(file));
stream.writeBoolean(true);
stream.writeInt(1234);
stream.close();

Zum Lesen des geschriebenen Inhalts:

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);

Sie können andere Arten von Streams verwenden, um das Lesen/Schreiben zu verbessern. Sie können beispielsweise einen Puffer für die Effizienz einführen:

DataInputStream stream = new DataInputStream(
    new BufferedInputStream(new FileInputStream(file)));

Sie können andere Daten wie Objekte schreiben:

MyClass myObject = new MyClass(); // MyClass have to implement Serializable
ObjectOutputStream stream = new ObjectOutputStream(
    new FileOutputStream("C:/text.obj"));
stream.writeObject(myObject);
stream.close();

Sie können aus anderen Eingabequellen lesen:

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);

Für die meisten Eingabeströme gibt es auch einen Ausgabestrom. Sie können Ihre eigenen Streams zum Lesen/Schreiben spezieller Dinge definieren, und es gibt komplexe Streams zum Lesen komplexer Dinge (z. B. gibt es Streams zum Lesen/Schreiben im ZIP-Format).

Benutzer-Avatar
Ravindra Babu

Von dem Java-Tutorial:

Ein Stream ist eine Folge von Daten.

Ein Programm verwendet einen Eingabestrom, um Daten aus einer Quelle Element für Element zu lesen:

Geben Sie hier die Bildbeschreibung ein

Ein Programm verwendet einen Ausgabestrom, um Daten Element für Element an ein Ziel zu schreiben:

Geben Sie hier die Bildbeschreibung ein

Die oben abgebildete Datenquelle und das Datenziel können alles sein, was Daten enthält, generiert oder verbraucht. Offensichtlich gehört dazu Disk-Dateienkann aber auch eine Quelle oder ein Ziel sein ein anderes Programm, ein Peripheriegerät, ein Netzwerk-Socket oder ein Array.

Probe Code aus dem Oracle-Tutorial:

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();
            }
        }
    }
}

Dieses Programm verwendet zum Kopieren Byteströme xanadu.txt Datei zu outagain.txt , indem ein Byte nach dem anderen geschrieben wird

Werfen Sie einen Blick auf diese SE-Frage, um mehr Details über erweiterte Zeichenströme zu erfahren, die Wrapper auf Byte Streams sind:

Bytestrom und Zeichenstrom

Benutzer-Avatar
Pstanton

Sie lesen von einem InputStream und schreiben in einen OutputStream.

Angenommen, Sie möchten eine Datei kopieren. Sie würden einen FileInputStream zum Lesen aus der Quelldatei und einen FileOutputStream zum Schreiben in die neue Datei erstellen.

Wenn Ihre Daten ein Zeichenstrom sind, können Sie einen FileReader anstelle eines InputStream und einen FileWriter anstelle eines OutputStream verwenden, wenn Sie dies bevorzugen.

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();

OutputStream ist eine abstrakte Klasse, die die Schreibausgabe darstellt. Es gibt viele verschiedene OutputStream-Klassen, und sie schreiben bestimmte Dinge (wie den Bildschirm oder Dateien oder Byte-Arrays oder Netzwerkverbindungen usw.). InputStream-Klassen greifen auf dieselben Dinge zu, aber sie lesen Daten daraus ein.

Hier ist ein gutes grundlegendes Beispiel FileOutputStream und FileInputStream verwenden, um Daten in eine Datei zu schreiben und sie dann wieder einzulesen.

Ein Strom ist ein kontinuierlicher Fluss von Flüssigkeit, Luft oder Gas.

Java-Stream ist ein Datenfluss von einer Quelle zu einem Ziel. Quelle oder Ziel können eine Festplatte, ein Speicher, ein Socket oder andere Programme sein. Die Daten können Bytes, Zeichen oder Objekte sein. Dasselbe gilt für C#- oder C++-Streams. Eine gute Metapher für Java-Bäche ist Wasser, das aus einem Wasserhahn in eine Badewanne und später in einen Abfluss fließt.

Die Daten stellen den statischen Teil des Streams dar; die Lese- und Schreibmethoden den dynamischen Teil des Streams.

InputStream stellt einen Datenfluss von der Quelle dar, der OutputStream stellt einen Datenfluss in das Ziel dar. Endlich, InputStream und OutputStream sind Abstraktionen über den Low-Level-Zugriff auf Daten, wie z. B. C-Dateizeiger.

Benutzer-Avatar
Gemeinschaft

Strom: In Laienbegriffen ist Stream Daten, der generischste Stream ist eine binäre Darstellung von Daten.

Eingabestrom : Wenn Sie Daten aus einer Datei oder einer anderen Quelle lesen, ist der verwendete Stream der Eingabestream. Einfacher ausgedrückt fungiert der Eingabestrom als Kanal zum Lesen von Daten.

Ausgabestrom : Wenn Sie Daten aus einer Quelle (Datei usw.) lesen und verarbeiten möchten, müssen Sie zuerst die Daten speichern. Das Mittel zum Speichern von Daten ist der Ausgabestrom.

1359260cookie-checkWas ist InputStream und OutputStream? Warum und wann verwenden wir sie?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy