it-swarm.com.de

Warum hat byteArray eine Länge von 22 anstatt von 20?

Wir versuchen, die Zeichenfolge mit dem folgenden Java Code in Byte[] Umzuwandeln:

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16");

Wir erhalten ein Byte-Array mit einer Länge von 22 Byte. Wir sind uns nicht sicher, woher diese Auffüllung kommt. Wie erhalte ich ein Array mit einer Länge von 20?

47
mayaalpe

Alexanders Antwort erklärt, warum es da ist, aber nicht, wie man es loswird. Sie müssen lediglich die gewünschte Endianzahl im Codierungsnamen angeben:

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE
71
Jon Skeet

Möglicherweise sind die ersten beiden Bytes das Byte Order Mark . Es gibt die Reihenfolge der Bytes in jedem 16-Bit-Wort an, das bei der Codierung verwendet wird.

25
Alexander

Versuchen Sie, die Bytes hexadezimal auszudrucken, um zu sehen, wo die zusätzlichen 2 Bytes hinzugefügt werden - befinden sie sich am Anfang oder am Ende?

Ich gehe davon aus, dass Sie am Anfang (0xFEFF) einen Byte Order Marker finden. Dadurch kann jeder, der das Byte-Array konsumiert (empfängt), erkennen, ob es sich bei der Codierung um Little-Endian oder Big-Endian handelt .

7
Bevan

UTF hat am Anfang eine Markierung für die Bytereihenfolge, die angibt, dass dieser Stream in einem bestimmten Format codiert ist. Wie die anderen Benutzer bereits betont haben, ist die
1. Byte ist 0XFE
2. Byte ist 0XFF
Die restlichen Bytes sind
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57

6
anjanb