Java hat zwei Arten von Klassen für Eingabe und Ausgabe (E / A): Streams und Reader / Writer .
Bäche ( InputStream
, OutputStream
und alles, was diese erstreckt) sind zum Lesen und Schreiben von binären Daten aus Dateien, das Netzwerk, oder was auch immer ein anderes Gerät.
Leser und Schriftsteller dienen zum Lesen und Schreiben von Text (Zeichen). Sie sind eine Schicht über Streams, die Binärdaten (Bytes) mithilfe einer Zeichencodierung in Zeichen und zurück konvertiert .
Das byteweise Lesen von Daten von der Festplatte ist sehr ineffizient. Eine Möglichkeit, dies zu beschleunigen, besteht darin, einen Puffer zu verwenden: Anstatt jeweils ein Byte zu lesen, lesen Sie einige tausend Bytes gleichzeitig und speichern sie in einem Puffer im Speicher. Dann können Sie die Bytes im Puffer einzeln betrachten.
Das Java-Tutorial von Oracle zu E / A erklärt dies ausführlich.
Betrachten Sie die von Ihnen angegebene Codezeile:
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.in
ist ein InputStream
. Sie erstellen eine, aus InputStreamReader
der Bytes gelesen werden System.in
. Dann wickeln Sie das in ein BufferedReader
.
Am Ende haben Sie also eine BufferedReader
, die von einer InputStreamReader
liest, die von liest System.in
.
InputStreamReader
ist ein Wrapper um einInputStream
, mit dem Sie Text aus einem lesen könnenInputStream
. Wenn Sie nur Bytes (keine Zeichen) lesen möchten, brauchen Sie keineInputStreamReader
. Dies ist nützlich, wenn Sie die Bytes als Textzeichen interpretieren möchten.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:
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:
Byte Input Stream-Klassen erhalten die Eingabe als Rohbytes . Byte-Ausgabe Stream-Klassen geben die Ausgabe als Rohbytes an .
InputStream
- Direkt bekannte UnterklassenOutputStream
- Direkt bekannte UnterklassenCharakter-Streams: Sie sind eine Ebene über Byte-Streams. Sie konvertieren Bytes (Binärdaten) in Zeichen und Zeichen in Bytes unter Verwendung einer Zeichencodierung.
Reader
- Direkt bekannte UnterklassenWriter
- Direkt bekannte UnterklassenByte Bäche & Character Streams verwenden ungepufferte E / A .
Gepufferte Streams:
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:
Es gibt 4 gepufferte Stream-Klassen, die zum Umschließen ungepufferter Streams verwendet werden:
Verwenden Sie zum Erstellen gepufferter Byte-Streams
BufferedInputStream
undBufferedOutputStream
Klassen.Verwenden Sie zum Erstellen gepufferter Zeichenströme
BufferedReader
undBufferedWriter
Klassen.quelle
Nun, es ist eine Frage für jeden, der anfängt, an java.io zu arbeiten. Um Ihre Fragen zu beantworten, stellen InputStreamReader und BufferedReader nur die Java-Objekte dar (sie haben nichts Besonderes), sie werden jedoch für Io-Vorgänge wie Lesen und Schreiben von / zu verschiedenen Ein- / Ausgängen wie Datei, Objekt usw. Erstellt
Kommen wir nun zur Linie
InputStreamReader ist die Klasse zum Lesen des Eingabestreams von Bytes. Das Lesen jedes Bytes ist jedoch eine teure Operation, daher wickeln wir es um BufferedReader, um es zu puffern (was ein Dekorationsmuster ist).
Noch bevor Sie mit dem Lesen beginnen, speichert bufferedReader einen Teil der Bytes im Register und wenn Sie den Lesevorgang ausführen. Es wird von diesem Speicherort gelesen, der viel billiger ist als das Lesen von der Konsole / Datei. Im Fall von InputStreamReader wird jedoch bei jedem Festplattenzugriffsvorgang ein Lesevorgang ausgeführt
quelle
Ein Stream ist die Verbindung und die tatsächlichen Informationen, die zwischen Punkten übertragen werden. Der Puffer ist ein Speichercontainer, der einen Teil oder die gesamten gestreamten Daten speichert und diese dem Ausgabegerät zuführt.
Der Punkt ist natürlich, dass die Ausgabe pausieren würde, wenn der Stream über die zum Anzeigen der Daten erforderliche Datenrate hinaus verlangsamt. Der Puffer verhindert dies.
quelle
stream
Pakete. Der entfernte Computer speichert dann jedes Paket in einem Puffer. Der Remote-Computer liest die Daten aus seinem Puffer und erstellt daraus beispielsweise ein Video. Ich hoffe das hilft!Ein Puffer ist ein Teil im Speicher, der zum Speichern eines Datenstroms von Peripheriegeräten verwendet wird. Aus diesem Puffer wird dann dieser Datenstrom gesammelt und in Variablen gespeichert. Ein Stream kann als kontinuierlicher Datenfluss definiert werden.
Der Begriff „Eingabe / Ausgabe“ bedeutet nichts anderes als das Verschieben von Daten in und aus Puffern. Behalte das einfach die ganze Zeit im Kopf. Prozesse führen E / A durch, indem sie vom Betriebssystem anfordern, dass Daten aus einem Puffer entleert werden (Schreibvorgang) oder dass ein Puffer mit Daten gefüllt wird (Lesevorgang).
Logisches Diagramm, wie sich Daten bewegen
Stellen Sie sich in einfachen Worten vor, wenn Sie Daten über eine Tastatur eingeben, werden die Daten über eine Pipe (den Stream ) in den Puffer und dann vom Puffer auf die Festplatte übertragen (Schreibvorgang). Wenn Daten von der Festplatte zum Puffer und vom Puffer zur Konsole verschoben werden, handelt es sich ebenfalls um eine Leseoperation.
Sie können die Links zum besseren Verständnis lesen. Ich hoffe es hilft!.
Was ist Puffer in Java? Geben Sie
hier die Linkbeschreibung ein
quelle