1. OutputStreamKlasse
Wir haben erst kürzlich Eingabeströme untersucht. Es ist Zeit, über Ausgabeströme zu sprechen.
Die OutputStreamKlasse ist die übergeordnete Klasse für alle Klassen, die die Byte-Ausgabe unterstützen. Dies ist eine abstrakte Klasse, die für sich genommen nichts tut, aber für jeden Anlass Nachkommenklassen hat.
Es klingt äußerst kompliziert. Einfacher ausgedrückt: Diese Klasse arbeitet mit Bytes und nicht beispielsweise mit Zeichen oder anderen Datentypen. Und die Tatsache, dass es abstrakt ist, bedeutet, dass wir es normalerweise nicht verwenden, sondern eine seiner Nachkommenklassen. Zum Beispiel FileOutputStreamund dergleichen.
Aber zurück zur OutputStreamKlasse. Diese Klasse verfügt über Methoden, die alle ihre Nachkommenklassen implementieren müssen. Hier sind die wichtigsten:
| Methoden | Beschreibung |
|---|---|
|
Schreibt ein Byte (kein int) in den Stream. |
|
Schreibt ein Array von Bytes in den Stream |
|
Schreibt einen Teil eines Byte-Arrays in den Stream |
|
Schreibt alle im Puffer gespeicherten Daten in den Stream |
|
Schließt den Stream |
Wenn Sie ein Objekt einer Klasse erstellen, die erbt InputStream, geben Sie normalerweise ein Quellobjekt an, InputStreamaus dem Daten gelesen werden. Wenn Sie ein Objekt einer Klasse erstellen, die erbt OutputStream, geben Sie normalerweise auch das Zielobjekt oder den Zielstream an, in den die Daten geschrieben werden.
Gehen wir kurz alle Methoden der OutputStreamKlasse durch:
write(int b)Methode
Diese Methode schreibt ein Byte (kein int) in den Ausgabestream. Der übergebene Wert wird in ein Byte umgewandelt und die ersten drei Bytes des Int werden verworfen.
write(byte[] buffer)Methode
Schreibt das angegebene Byte-Array in den Ausgabestream. Das ist es.
write(byte[] buffer, int offset, int length)Methode
Schreibt einen Teil des übergebenen Byte-Arrays in den Ausgabestream. Die Offset-Variable gibt den Index des ersten Elements des Arrays an und lengthist die Länge der zu schreibenden Teilmenge.
flush()Methode
Die flush()Methode wird verwendet, um zu erzwingen, dass alle möglicherweise im aktuellen Stream gepufferten Daten in den Zielstream geschrieben werden. Dies ist relevant, wenn Pufferung und/oder mehrere in einer Kette angeordnete Stream-Objekte verwendet werden.
close()Methode
Schreibt alle ungeschriebenen Daten in das Zielobjekt. close()Wenn Sie einen Block verwenden, muss die Methode nicht aufgerufen werden try-with-resources.
Beispiel für das Kopieren einer Datei
| Code | Notiz |
|---|---|
|
InputStreamzum Lesen aus einer Datei OutputStreamzum Schreiben in eine Datei Puffer, in den wir die Daten einlesen werden Solange Daten im Stream vorhanden sind Daten in den Puffer lesen Die Daten aus dem Puffer in den zweiten Stream schreiben |
2. WriterKlasse
Die WriterKlasse ist genau die gleiche wie die OutputStreamKlasse, hat aber noch einmal einen Unterschied: Sie arbeitet mit Zeichen ( char) statt mit Bytes.
Dies ist eine abstrakte Klasse: Sie können keine Objekte der WriterKlasse erstellen. Ihr Hauptziel besteht darin, eine gemeinsame Elternklasse für Hunderte von Nachkommenklassen zu sein und ihnen gemeinsame Methoden für die Arbeit mit Zeichenströmen zur Verfügung zu stellen.
Methoden der WriterKlasse (und aller ihrer Nachkommenklassen):
| Methoden | Beschreibung |
|---|---|
|
Schreibt ein Zeichen (kein int) in den Stream. |
|
Schreibt ein Array von Zeichen in den Stream |
|
Schreibt einen Teil eines Zeichenarrays in den Stream |
|
Schreibt einen String in den Stream |
|
Schreibt einen Teil einer Zeichenfolge in den Stream |
|
Schreibt alle im Puffer gespeicherten Daten in den Stream |
|
Schließt den Stream |
Die Methoden sind den Methoden der OutputStreamKlasse sehr ähnlich, arbeiten jedoch mit Zeichen statt mit Bytes.
Beschreibung der Methoden:
write(int b)Methode
Diese Methode schreibt ein einzelnes Zeichen ( char— kein int) in den Ausgabestream. Der übergebene Wert wird in a umgewandelt charund die ersten beiden Bytes werden verworfen.
write(char[] buffer)Methode
Schreibt das angegebene Zeichenarray in den Ausgabestream.
write(char[] buffer, int offset, int length)Methode
Schreibt einen Teil des übergebenen Zeichenarrays in den Ausgabestream. Die offsetVariable gibt den Index des ersten Elements des Arrays an und lengthist die Länge der zu schreibenden Teilmenge.
write(String str)Methode
Schreibt die angegebene Zeichenfolge in den Ausgabestream.
write(String str, int offset, int length)Methode
Schreibt einen Teil der angegebenen Zeichenfolge in den Ausgabestream: Die Zeichenfolge wird in ein Array von Zeichen konvertiert. Die offsetVariable gibt den Index des ersten Elements des Arrays an und lengthist die Länge der zu schreibenden Teilmenge.
flush()Methode
Die flush()Methode wird verwendet, um zu erzwingen, dass alle möglicherweise im aktuellen Stream gepufferten Daten in den Zielstream geschrieben werden. Dies ist relevant, wenn Pufferung und/oder mehrere in einer Kette angeordnete Stream-Objekte verwendet werden.
close()Methode
Schreibt alle ungeschriebenen Daten in das Zielobjekt. close()Wenn Sie einen Block verwenden, muss die Methode nicht aufgerufen werden try-with-resources.
Beispiel für ein Programm, das eine Textdatei kopiert:
| Code | Notiz |
|---|---|
|
Readerzum Lesen aus einer Datei Writerzum Schreiben in eine Datei Puffer, in den wir die Daten einlesen werden Solange Daten im Stream vorhanden sind Daten in einen Puffer lesen Die Daten aus dem Puffer in den zweiten Stream schreiben |
StringWriterKlasse
Es gibt eine weitere interessante Klasse, die die Klasse erbt Writer: Sie heißt StringWriter. Es enthält eine veränderbare Zeichenfolge – ein StringBufferObjekt. Und jedes Mal, wenn Sie etwas in das StringWriterObjekt „schreiben“, wird der Text einfach zu seinem internen Puffer hinzugefügt.
Beispiel:
| Code | Notiz |
|---|---|
|
Es wird ein Zielzeichenstrom ( StringWriter) erstellt. Eine Zeichenfolge wird in den Puffer im Inneren geschrieben. StringWriterEine Zeichenfolge wird in den Puffer im Inneren geschrieben. StringWriterKonvertieren des Inhalts eines Objekts in eine Zeichenfolge |
In diesem Fall ist die StringWriterKlasse im Wesentlichen ein Wrapper für die StringBufferKlasse, aber die StringWriterKlasse ist ein Nachkomme der WriterStream-Klasse und kann in Ketten von Stream-Objekten verwendet werden. Dies ist in der Praxis eine ziemlich nützliche Eigenschaft.
GO TO FULL VERSION