In Java und C # gibt es mehrere Klassen zum Puffern von Streams:
BufferedStream
in C #, Buffered(Input|Output)Stream
und Buffered(Reader|Writer)
.
Sie erhalten einen Stream im Konstruktor und implementieren dieselbe Schnittstelle.
Die Frage ist - wie es funktioniert?
Was passiert, wenn ich versuche, ein Byte zu lesen? Es liest viele Bytes in den inneren Puffer und gibt es Byte für Byte an mich zurück. Auf ein Byte schreiben? Schreibt in den inneren Puffer und schreibt sie in flush()
in den inneren Stream?
Und was das Lesen / Schreiben eines Arrays von Bytes angeht - ist es ineffizient, dies bei gepufferten Streams zu tun, weil doppelte Bytes in und aus dem inneren Array kopiert werden?
Es liest viele Bytes in den inneren Puffer und gibt es dann Byte für Byte an mich zurück?
Grundsätzlich ja. Es braucht Zeit, um Daten von Plattenplattentellern oder von einem TCP-Datenstrom anzufordern, so dass es effizienter sein kann, einen ganzen Block von Bytes gleichzeitig zu erhalten, anstatt zu versuchen, sie einzeln von der Quelle abzurufen.
Tags und Links java c# stream encapsulation buffer