Ich vermute mal, das Verständnisproblem an der Stelle ist ein viel Grundsätzlicheres. Zumindest würde es mich nicht wundern, denn immerhin haben fast alle Menschen, die ich so kenne, das gleiche Problem (und das soll jetzt nicht heißen, dass ich davon verschont bliebe):
Dies ist keine Pfeife.
(Es folgt ein Versuch, den Unterschied zwischen Daten und Informationen zu erklären.)
Ein Datum (lat. "Gegebenes", Plural: Daten) ist mehr oder weniger einfach da. Nehmen wir mal als Beispiel den Text, den du gerade liest. Für jemanden, der mit lateinischen Buchstaben nicht umgehen kann, ist das hier kein Text, noch weniger eine Folge lateinischer Buchstaben und noch viel weniger ist das hier für denjenigen (oder diejenige) ein deutscher Text. Zum besseren Verständnis: die meisten Deutsch-Muttersprachler sind nicht in der Lage,
diese Folge von Schriftzeichen sicher der japanischen Sprache zuzuordnen, weil sie sie nicht von Chinesisch unterscheiden können. Sie können diese Schriftzeichen auch nicht richtig (mit der Hand) abschreiben, weil sie nicht wissen, worauf es ankommt. Ins Deutsche übertragen können sie es auch nicht.
Warum? Weil ihnen der richtige "Dekodierer" (decoder) fehlt: Decoder machen aus Daten Informationen, indem sie diesen Daten eine Bedeutung* geben. Menschen ohne Japanischkenntnisse können dem verlinkten Bild nicht die (vom Sender intendierte) richtige Information entlocken.
Nun zu Java & Co.: Ein InputStreamReader dekodiert eine Folge von Bytes zu einer Folge von Zeichen: eine Folge von Bits steht dann für das Zeichen A. Aber da ist kein A! Der ISR tut nur so, als hätte er gerade eines gelesen.** Information kann sich also auch z.B. durch entsprechende Reaktionen manifestieren.**
Wenn wir aber Information speichern oder übertragen wollen, müssen wir sie anders greifbar machen. Dies passiert z.B. im Rechner dadurch, dass bestimmte Stromflüsse geändert werden, die wiederum als 0 bzw. 1 interpretiert werden. Nun haben wir aber nicht unendlich viel Platz dafür, also begnügen wir uns mit nur wenigen Bits: das gelesene A überträgt der ISR an den Aufrufer, indem er es wieder als int kodiert(!) an ihn zurückgibt (er macht aus der Information "Zeichen A" wieder ein Datum).
Aber woher wissen wir, dass das, was der Reader zurückgibt, in diesem Fall für den Buchstaben A steht, und nicht für etwas anderes? Weil es für die read()-Methode so definiert wurde! Man hat sich gewissermaßen darauf geeinigt, dass das, was der Reader ausspuckt, als Unicode-Zeichen zu verstehen ist. Man hat sich auch darauf geeinigt, dass die 16 Bits in einem char als Unicode-Zeichen zu deuten sind. Im Gegensatz dazu werden die 16 Bits in einem short als Ganzzahl in Zweierkomplement-Darstellung gedeutet. Dass man mit chars rechnen kann, liegt nur daran, dass z.B. bei der Addition die 16 Bits des chars als natürliche Zahl gedeutet werden.
Es ist alles eine Sache der Definition, Interpretation usw.
Ark
*: Gibt es für die Stelle ein besseres Wort?
**: Es ist schwierig bis unmöglich, dies wirklich "richtig" zu erklären. Ein Zen-Meister kann das wahrscheinlich besser als ich. 