Warum hat byteArray eine Länge von 22 statt 20?
Frage
Wir versuchen, aus Zeichenfolge zu konvertieren dem folgenden Java-Code Byte[]
mit:
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16");
Wir bekommen einen Byte-Array mit einer Länge von 22 Bytes, sind wir nicht sicher, wo diese Polsterung herkommt. Wie erhalte ich ein Array mit einer Länge von 20?
Lösung
Alexander Antwort erklärt, warum es da ist, aber nicht, wie man werde es los. Sie müssen lediglich die endianness Sie in der Codierung Namen angeben möchten:
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE
Andere Tipps
Kann sein, die ersten beiden Bytes sind die Byte Order Mark . Es gibt die Reihenfolge des Bytes in jedem 16-Bit-Wort in der Codierung verwendet wird.
Versuchen Sie, das Bytes in Hex-Druck, um zu sehen, wo das zusätzliche 2 Bytes hinzugefügt wird - ist sie am Anfang oder am Ende
Ich empfange, dass Sie einen Byteorder Marker zu Beginn finden (0xFEFF .) - dies ermöglicht es jeden (Empfang) den Byte-Array raubend zu erkennen, ob die Codierung little-endian oder big-endian ist
UTF hat am Anfang einen Byte-Reihenfolge Marker, der dieser Strom sagt, dass in einem bestimmten Format codiert ist. Wie die anderen Benutzer haben darauf hingewiesen, 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