Puffer:
Dies ist ein Bereich eines physischen Speichers , in dem Daten vorübergehend gespeichert werden, während sie von einem Ort an einen anderen verschoben werden. Dieser physische Speicher wäre in den meisten Fällen RAM (Arbeitsspeicher).
Aus dem Kontext dieser Frage wird jedoch Puffer beim Lesen / Schreiben von Daten verwendet. Es muss nicht verwendet werden, wenn Daten von einem Ort an einen anderen verschoben werden.
Beispiel für einen Puffer: Wenn Ihr System über 4 GB RAM verfügt, können vom System 4 KB Arbeitsspeicher (RAM) für den Puffer zugewiesen werden. KB - Kilobyte (n), GB - Gigabyte (s)
E / A-Stream (oder) Stream:
Der E / A-Stream repräsentiert eine Eingabequelle oder ein Ausgabeziel. Ein Stream kann viele verschiedene Arten von Quellen und Zielen darstellen, einschließlich Festplattendateien, Geräten, anderen Programmen und Speicherarrays.
E / A bedeutet Eingabe / Ausgabe.
Der Eingabestream kann also eine Eingabequelle wie eine Festplattendatei, eine Netzwerkverbindung usw. sein.
Der Ausgabestream kann ein Ausgabeziel wie eine Festplattendatei, eine Netzwerkverbindung usw. sein.
Laut der offiziellen Dokumentation von JAVA gibt es drei Arten von Streams.
- Byte-Streams (Lesen oder Schreiben von Bytes)
- Zeichenströme ( Zeichen lesen oder schreiben)
- Gepufferte Streams (aus Effizienzgründen aus dem Puffer lesen oder in diesen schreiben )
Byte-Streams:
Sie führen die Eingabe und Ausgabe von 8-Bit-Bytes durch. Alle Byte-Stream-Klassen stammen von InputStream und OutputStream ab .
Byte Input Stream-Klassen erhalten die Eingabe als Rohbytes . Byte-Ausgabe Stream-Klassen geben die Ausgabe als Rohbytes an .
InputStream
- Direkt bekannte Unterklassen
AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream.
OutputStream
- Direkt bekannte Unterklassen
ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream
Charakter-Streams:
Sie sind eine Ebene über Byte-Streams. Sie konvertieren Bytes (Binärdaten) in Zeichen und Zeichen in Bytes unter Verwendung einer Zeichencodierung.
Alle Zeichenstromklassen stammen von Reader und Writer ab .
Reader
- Direkt bekannte Unterklassen
BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader
Writer
- Direkt bekannte Unterklassen
BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter
Byte Bäche & Character Streams verwenden ungepufferte E / A .
Dies bedeutet, dass jede Lese- oder Schreibanforderung direkt vom zugrunde liegenden Betriebssystem verarbeitet wird. Dies kann ein Programm viel weniger effizient machen, da jede solche Anforderung häufig den Festplattenzugriff, die Netzwerkaktivität oder eine andere Operation auslöst, die relativ teuer ist. Um diesen Overhead zu reduzieren, implementiert die Java-Plattform gepufferte E / A-Streams.
Gepufferte Streams:
Gepufferte Eingabeströme lesen Daten aus einem Speicherbereich, der als Puffer bekannt ist . Die native Eingabe-API wird nur aufgerufen, wenn der Puffer leer ist.
In ähnlicher Weise schreiben gepufferte Ausgabestreams Daten in einen Puffer , und die native Ausgabe-API wird nur aufgerufen, wenn der Puffer voll ist.
Ein Programm kann einen ungepufferten Stream unter Verwendung der Umbruchsprache in einen gepufferten Stream konvertieren , wobei das ungepufferte Stream-Objekt für eine gepufferte Stream-Klasse an den Konstruktor übergeben wird .
Beispiel:
inputStream = new BufferedReader(new FileReader("xanadu.txt"));
outputStream = new BufferedWriter(new FileWriter("characteroutput.txt"));
Es gibt 4 gepufferte Stream-Klassen, die zum Umschließen ungepufferter Streams verwendet werden:
Verwenden Sie zum Erstellen gepufferter Byte-StreamsBufferedInputStream
und BufferedOutputStream
Klassen.
Verwenden Sie zum Erstellen gepufferter ZeichenströmeBufferedReader
und BufferedWriter
Klassen.