Die Länge des Arrays ist die Größe der Kapazität von ByteBuffer
, die aus der Anzahl der Zeichen generiert wird, die Sie codieren, jedoch nicht gleich ist. Werfen wir einen Blick darauf, wie wir Speicher für ein ByteBuffer
... reservieren
Wenn Sie in die encode()
Methode bohren, werden Sie feststellen, dass CharsetEncoder#encode(CharBuffer)
wie folgt aussieht:
Nach meinem Debugger ist die averageBytesPerChar
einer UTF_8$Encoder
1.1
und die Eingabe String
hat 11
Zeichen. 11 * 1.1 = 12.1
, und der Code wandelt die Gesamtsumme bei der Berechnung in int
um. Die resultierende Größe von ByteBuffer
ist also 12.
Weil es ein ByteBuffer
zurückgibt. Das ist die Kapazität des Puffers (nicht wirklich wegen des möglichen Slicing), nicht wie viele Bytes verwendet werden. Es ist ein bisschen so, wie malloc(10)
32 Bytes Speicher freigibt.
Das ist 11 (wie erwartet).
Tags und Links java character-encoding