Java - Stream von Bytes gegen Strom von Zeichen?

8

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.

    
IAmYourFaja 26.02.2013, 20:04
quelle

4 Antworten

16

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

    
Matt Ball 26.02.2013, 20:06
quelle
5

Sie sind anders. Character und char sind 2-Byte-Datentypen in Java. Byte und byte sind 1-Byte-Datentypen.

Bearbeiten: char ist auch ein vorzeichenloser Typ, während byte nicht ist.

    
pamphlet 26.02.2013 20:07
quelle
3

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.

nhahtdh 26.02.2013 20:10
quelle
0

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.

    
Dmitry 26.02.2013 20:13
quelle

Tags und Links