Unterschied zwischen InputStream und Reader

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

im Google habe ich gefunden:
Java IO's Reader and Writer work much like the InputStream and OutputStream with the exception that Reader and Writer are character based. They are intended for reading and writing text. The InputStream and OutputStream were byte based, remember?

Ich habe Schwierigkeit, "The InputStream and OutputStream were byte based" zu verstehen. Also, anstatt Zeichen pro Zeichen zu lesen bzw. zu schreiben, erfolgt der Lesevorgang bzw. Schreibvorgang hier byteweise. Bedeutet dies, dass direkt mehrere Zeichen gelesen bzw. geschrieben werden können, da pro Byte mehrere Zeichen gespeichert werden können?

Schönen Dank.

Viele Grüße aus Rheinland,

Eure Ratna:)
 
Hi

nein, genau umgekehrt.

Ein Byte kann ja genau 256 verschiedene Werte haben (-128 bis +127)
Und irgendwelche Wörter/Zeichenfolgen werden im "Inneren" des Computers
ja als Zahlenfolge gespeichert (in Stringvariablen, in Dateien...überall).

Dazu muss es eine Zuordnung geben, welches Zeichen zu welcher Zahl gehört.
Der einfachste der bekannten Fälle, der ASCII-Code, hat zB. 65 für ein großes A,
97 wäre ein kleines a, 48 die Ziffer 0 usw.
(der Computer weiß dazu außerdem noch,
wie die Buchstaben etc. am Bildschirm auszusehen haben.
Aber das ist eine andere Geschichte).

Ohne diese Zuordnungstabelle wäre eine Textdatei komplett nutzlos,
weil man keine Ahnung hat, welcher Text dieser Zahlenhaufen sein soll.
Für Dateiformate von Bildern und so ists aber egal
(Beispiel zum Aufbau: Für jeden Pixel die Rot/Grün/Blau-Anteile der Farbe
als Zahl 0-255 in je ein Byte speichern. Unabhängig von irgendwelchem menschlichen Text.)

Der ASCII-Code (bzw. Erweiterungen, egal) ordnet jede der 256 Möglichkeiten
eines Bytes einem Zeichen zu, pro Zeichen wird also immer genau ein Byte verwendet.
Normalen englischen Text kann man damit problemlos darstellen.
Es gibt Groß/kleinbuchstaben, Ziffern, Satzzeichen usw.usw. drin.

Aber schon bei deutschen Umlauten äöüß gehts mit den Problemen los,
weil die "Urversion" vom ASCII einfach keine Nummern für diese Zeichen hat.
Selbes Problem mit den "gehakten" Buchstaben im Französischen/Spanischen,
und dann gibts ja noch Griechisch, Russisch...
spätestens bei Chinesisch (jedes Wort sein ganz eigenes Zeichen)
ist man mit nur 256 Möglichkeiten hoffnungslos überfordert.

Daher haben sich andere Zeichensätze entwickelt, die international tauglicher sind
und jedem Zeichen jeder Sprache seine ganz eigene Nummer geben,
ohne Überschneidungen usw.
Dafür muss aber pro Zeichen auch mehr als ein Byte verwendet werden...


Jetzt sollte klar sein, was gemeint ist, oder?
Die Streams lassen wirklich Byte für Byte verarbeiten,
die Reader/Writer bekommen die Info welcher Zeichensatz verwendet wird
und lesen/schreiben dann pro Buchstaben passend viel Byte.
(ist nicht ganz so einfach wie es klingt, da die Zeichensätze
teilweise je nach Zeichen verschieden viel Byte verwenden)
 
Hallo sheel,

vielen Dank für die ausführliche und vor allem verständliche Erklärung. Das heißt, wenn man weiss, dass für einen Buchstabe mehr als 1 Byte verwendet wird, bringt die Verwendung von Reader bzw. Writer einen Geschwindigkeitsschub als von Input- bzw. OutputStream, die byte pro byte lesen/schreiben.

Stimmt diese Behauptung?

Schöne Grüße aus Rheinland,

Eure Ratna
 
Geschwindigkeit: Wahrscheinlich, aber der Hauptgrund
für die Verwendung ist die Vereinfachung für den Programmierer.
 

Neue Beiträge

Zurück