1. OutputStream
Klasse
Wir haben erst kürzlich Eingabeströme untersucht. Es ist Zeit, über Ausgabeströme zu sprechen.
Die OutputStream
Klasse 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 FileOutputStream
und dergleichen.
Aber zurück zur OutputStream
Klasse. 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, InputStream
aus 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 OutputStream
Klasse 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 length
ist 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 |
---|---|
|
InputStream zum Lesen aus einer Datei OutputStream zum 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. Writer
Klasse
Die Writer
Klasse ist genau die gleiche wie die OutputStream
Klasse, 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 Writer
Klasse 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 Writer
Klasse (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 OutputStream
Klasse 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 char
und 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 offset
Variable gibt den Index des ersten Elements des Arrays an und length
ist 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 offset
Variable gibt den Index des ersten Elements des Arrays an und length
ist 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 |
---|---|
|
Reader zum Lesen aus einer Datei Writer zum 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 |
StringWriter
Klasse
Es gibt eine weitere interessante Klasse, die die Klasse erbt Writer
: Sie heißt StringWriter
. Es enthält eine veränderbare Zeichenfolge – ein StringBuffer
Objekt. Und jedes Mal, wenn Sie etwas in das StringWriter
Objekt „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. StringWriter Eine Zeichenfolge wird in den Puffer im Inneren geschrieben. StringWriter Konvertieren des Inhalts eines Objekts in eine Zeichenfolge |
In diesem Fall ist die StringWriter
Klasse im Wesentlichen ein Wrapper für die StringBuffer
Klasse, aber die StringWriter
Klasse ist ein Nachkomme der Writer
Stream-Klasse und kann in Ketten von Stream-Objekten verwendet werden. Dies ist in der Praxis eine ziemlich nützliche Eigenschaft.
GO TO FULL VERSION