Der Titel ist ziemlich selbsterklärend. In vielen JRE-javadocs sehe ich überall die Sätze " stream of bytes " und " Zeichenstrom ".
Aber sind sie nicht das Gleiche? Oder sind sie im Java-Land etwas anders (z. B. anders interpretiert)? Vielen Dank im Voraus.
In Java ist byte
nicht dasselbe wie char
. Daher unterscheidet sich ein Byte-Stream von einem Zeichenstrom. Bytes sind für beliebige binäre Daten gedacht; Zeichen sind speziell für Daten, die die Bausteine von Strings darstellen.
aber wenn ein char nur 1 Byte breit ist
Mit Ausnahme von nicht.
Gemäß der JLS §4.2.1 a char
ist eine Zahl im Bereich:
von
'\u0000'
bis'\uffff'
inklusive, also von 0 bis 65535
Aber ein byte
ist eine Zahl im Bereich
von -128 bis einschließlich 127
Stream of Byte ist nur ein einfaches Byte, so wie Sie es sehen würden, wenn Sie eine Datei im HEX Editor öffnen.
Das Zeichen unterscheidet sich von einem einfachen Byte. ASCII-Codierung verwendet genau 1 Byte pro Zeichen, aber das gilt nicht für viele andere Codierung. Zum Beispiel kann die UTF-8-Codierung 1 bis 6 Byte verwenden, um ein einzelnes Zeichen zu codieren. Der Zeichenstrom dient dazu, die zugrunde liegende Kodierung wegzuspulen und char
eines Kodierungstyps zu erzeugen (in Java verwendet char
und String
UTF-16-Kodierung).
Als Faustregel gilt:
Wenn Sie mit Text arbeiten, müssen Sie einen Zeichenstrom verwenden, um das Byte mit der entsprechenden Codierung in Zeichen zu dekodieren.
Wenn Sie mit binären Daten oder gemischt aus binär und Text zu tun haben, müssen Sie Stream von Byte verwenden, da es sonst keinen Sinn ergibt. Wenn eine Bytefolge bei bestimmten Kodierungen einen String darstellt, können Sie diese Bytes immer auswählen und String(byte[] bytes, Charset charset)
Konstruktor, um die Zeichenfolge zurück zu bekommen.
Im Allgemeinen ist es besser, über Streams in Bezug auf ihre Größe zu sprechen, als was sie tragen. Ein Stream von Bytes ist intuitiver als ein Stream von Chars, da die Charts dazu führen, dass wir überprüfen müssen, ob ein Char tatsächlich ein Byte ist, kein Unicode-Char oder irgendetwas anderes.
Ein Zeichen ist eine Repräsentation, die durch ein Byte dargestellt werden kann, aber ein Byte wird immer ein Byte sein. Alle Welt wird brennen, wenn Bytes aufhören, 8 Bits zu sein.