Antworten:
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, sollte keine Rolle spielen. Alles, was zählt, ist, dass Sie Informationen vom Stream empfangen (oder Informationen in diesen Stream senden).
InputStream
wird für viele Dinge verwendet, aus denen Sie lesen.
OutputStream
wird für viele Dinge verwendet, an die Sie schreiben.
Hier ist ein Beispielcode. Es geht davon aus, dass InputStream instr
und OutputStream osstr
bereits erstellt wurden:
int i;
while ((i = instr.read()) != -1) {
osstr.write(i);
}
instr.close();
osstr.close();
InputStream wird zum Lesen verwendet, OutputStream zum Schreiben. Sie sind als Dekorateure miteinander verbunden, sodass 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();
So lesen Sie den schriftlichen Inhalt:
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 verschiedenen 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 Eingabestreams gibt es auch einen Ausgabestream. Sie können Ihre eigenen Streams zum Lesen / Schreiben spezieller Dinge definieren und es gibt komplexe Streams zum Lesen komplexer Dinge (zum Beispiel gibt es Streams zum Lesen / Schreiben des ZIP-Formats).
Aus dem Java-Tutorial :
Ein Stream ist eine Folge von Daten.
Ein Programm verwendet einen Eingabestream, um Daten aus einer Quelle einzeln zu lesen:
Ein Programm verwendet einen Ausgabestream, um Daten einzeln an ein Ziel zu schreiben:
Die oben abgebildete Datenquelle und das Datenziel können alles sein, was Daten enthält, generiert oder verbraucht. Dies umfasst natürlich Festplattendateien , aber eine Quelle oder ein Ziel kann auch ein anderes Programm, ein Peripheriegerät, ein Netzwerk-Socket oder ein Array sein .
Beispielcode von 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 Byte-Streams, um die Datei xanadu.txt in outagain.txt zu kopieren , indem jeweils ein Byte geschrieben wird
Schauen Sie sich diese SE-Frage an, um weitere Details zu erweiterten Charakter-Streams zu erfahren, die Wrapper über Byte-Streams sind:
Sie lesen aus 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();
close
immer flush
es, also nein.
OutputStream ist eine abstrakte Klasse, die das Schreiben von Ausgaben darstellt. Es gibt viele verschiedene OutputStream-Klassen, die bestimmte Dinge ausschreiben (z. B. den Bildschirm oder Dateien oder Byte-Arrays oder Netzwerkverbindungen usw.). InputStream-Klassen greifen auf dieselben Dinge zu, lesen jedoch Daten von ihnen ein.
Hier ist ein gutes grundlegendes Beispiel für die Verwendung von FileOutputStream und FileInputStream, 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. 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 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 sind der dynamische Teil des Streams.
InputStream
stellt einen Datenfluss von der Quelle dar, der OutputStream
einen Datenfluss in das Ziel darstellt. Schließlich InputStream
und OutputStream
sind Abstraktionen über den Zugriff auf Daten auf niedriger Ebene, wie z. B. C-Dateizeiger.
Stream : In Laienbegriffen ist Stream Daten, der allgemeinste Stream ist eine binäre Darstellung von Daten.
Eingabestream : Wenn Sie Daten aus einer Datei oder einer anderen Quelle lesen, wird als Stream der Eingabestream verwendet. Einfacher ausgedrückt fungiert der Eingabestream als Kanal zum Lesen von Daten.
Ausgabestream : Wenn Sie Daten aus einer Quelle (Datei usw.) lesen und verarbeiten möchten, müssen Sie zuerst die Daten speichern. Der Mittelwert zum Speichern von Daten ist der Ausgabestream.
Ein Ausgabestream bezieht sich im Allgemeinen auf ein Datenziel wie eine Datei oder ein Netzwerk usw. Der Java-Ausgabestream ist ein Ziel, an dem Daten schließlich geschrieben werden und enden
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");
}
}