wake-up-neo.com

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

Jemand erklärt mir, was InputStream und OutputStream sind?

Ich bin verwirrt über die Anwendungsfälle von InputStream und OutputStream.

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

250
Bohemian

Das Ziel von InputStream und OutputStream ist es, verschiedene Arten der Eingabe und Ausgabe zu abstrahieren: Ob der Stream eine Datei, eine Webseite oder der Bildschirm ist, spielt keine Rolle. 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, in die Sie schreiben.

Hier ist ein Beispielcode. Es wird davon ausgegangen, dass InputStream instr und OutputStream osstr bereits erstellt wurden:

int i;

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

instr.close();
osstr.close();
194
Chip Uni

InputStream wird zum Lesen verwendet, OutputStream zum Schreiben. Sie sind als Dekorateure miteinander verbunden, so dass Sie alle unterschiedlichen Datentypen aus verschiedenen Quellen lesen und schreiben können.

Sie können beispielsweise einfache 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();

Um den geschriebenen Inhalt zu lesen:

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 eigene Streams zum Lesen/Schreiben spezieller Dinge definieren und es gibt komplexe Streams zum Lesen komplexer Dinge (z. B. Streams zum Lesen/Schreiben des Zip-Formats).

84
Arne Deutsch

Aus dem Java Tutorial :

Ein Stream ist eine Folge von Daten.

Ein Programm verwendet einen Eingabestream zum Lesen von Daten aus einer Quelle, jeweils einzeln:

enter image description here

Ein Programm verwendet einen Ausgabestream, um Daten auf einmal an ein Ziel zu schreiben:

enter image description here

Die oben abgebildete Datenquelle und das Datenziel können alles sein, was Daten enthält, generiert oder verbraucht. Dies schließt natürlich Festplattendateien ein, aber eine Quelle oder ein Ziel kann auch ein anderes Programm, ein Peripheriegerät, ein Netzwerk sein Socket oder ein Array .

Beispiel 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 Byteströme, um xanadu.txt - Dateien nach outagain.txt, Byte für Byte zu kopieren

Schauen Sie sich diese SE-Frage an, um mehr über erweiterte Zeichenströme zu erfahren, die Wrapper über Byte-Streams sind:

Bytestrom und Zeichenstrom

31
Ravindra babu

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 es sich bei Ihren Daten um einen Zeichenstrom handelt, können Sie anstelle von InputStream einen FileReader und anstelle von OutputStream einen FileWriter verwenden.

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
pstanton

OutputStream ist eine abstrakte Klasse, die die Schreibausgabe darstellt. Es gibt viele verschiedene OutputStream-Klassen, die zu bestimmten Dingen (wie Bildschirm, Dateien, Byte-Arrays, Netzwerkverbindungen usw.) geschrieben werden. InputStream-Klassen greifen auf die gleichen Dinge zu, lesen jedoch Daten von ihnen ein.

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

5
Kaleb Brasee

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

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

Die Daten repräsentieren den statischen Teil des Streams. Die Lese- und Schreibmethoden sind der dynamische Teil des Streams. 

InputStream stellt einen Datenfluss aus der Quelle dar, die OutputStream repräsentiert einen Datenfluss in das Ziel Schließlich sind InputStream und OutputStream Abstraktionen über den Zugriff auf Daten auf niedriger Ebene, wie C-Dateizeiger.

2
Jan Bodnar

StromIn Laien ausgedrückt ist der Datenstrom Daten, der generische Datenstrom ist die binäre Darstellung von Daten.

Eingabestrom : Wenn Sie Daten aus einer Datei oder einer anderen Quelle lesen, ist der verwendete Stream der Eingabestrom. Einfacher ausgedrückt wirkt der Eingabestrom als ein 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. Der Mittelwert zum Speichern der Daten ist der Ausgabestrom.

2
Sher Mohammad

Ein Ausgabestrom bezieht sich im Allgemeinen auf ein Datenziel wie eine Datei oder ein Netzwerk usw. Im Java-Ausgabestrom handelt es sich um ein Ziel, an das Daten geschrieben werden, und endet

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
Deep Arora

Input Stream Vs Output Stream

Eingabestrom

  • Dieser Stream wird zum Lesen von Daten aus den Dateien verwendet
  • Objekte können mit dem Schlüsselwort new erstellt werden, und es stehen verschiedene Konstruktortypen zur Verfügung

  • Der folgende Konstruktor verwendet einen Dateinamen als Zeichenfolge, um ein Eingabestreamobjekt zum Lesen der Datei zu erstellen

    InputStream f = new FileInputStream("input.txt");

  • Der folgende Konstruktor verwendet ein Dateiobjekt, um ein Eingabestreamobjekt zum Lesen der Datei zu erstellen. Zuerst erstellen wir ein Dateiobjekt mit der Methode File () wie folgt

    File f = new File(“input.txt");

    InputStream f = new FileInputStream(f);

Ausgabestrom

  • FileOutputStream wird zum Erstellen einer Datei und zum Schreiben von Daten verwendet

  • Der Stream erstellt eine Datei, falls diese noch nicht vorhanden ist, bevor er sie zur Ausgabe öffnet

  • Hier sind zwei Konstruktoren, mit denen ein FileOutputStream-Objekt erstellt werden kann

  • Der folgende Konstruktor verwendet einen Dateinamen als Zeichenfolge, um ein Eingabestreamobjekt zum Schreiben der Datei zu erstellen

    OutputStream f = new FileOutputStream(“output.txt")

  • Der folgende Konstruktor verwendet ein Dateiobjekt, um ein Ausgabestreamobjekt zum Schreiben der Datei zu erstellen. Zuerst erstellen wir ein Dateiobjekt mit der Methode File () wie folgt

    File f = new File(“output.txt");

    OutputStream f = new FileOutputStream(f);

0