Wie lang ist eine in einem ByteBuffer codierte Zeichenfolge?

8
%Vor%

Warum gibt die obige Codezeile 12 aus, sollte nicht stattdessen 11 gedruckt werden?

    
Umesh 19.09.2014, 19:41
quelle

3 Antworten

11

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:

%Vor%

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.

    
azurefrog 19.09.2014, 19:53
quelle
1

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.

%Vor%

Das ist 11 (wie erwartet).

    
David Ehrmann 19.09.2014 19:45
quelle
0
%Vor%

Ergebnisse:

%Vor%

Das Array ist nullterminiert, wie jeder gute C-String.

(Aber anscheinend ist die wahre Ursache die flockige Methode array Es sollte wahrscheinlich nicht im "Produktionscode" verwendet werden, außer mit großer Vorsicht.

    
Hot Licks 19.09.2014 19:53
quelle

Tags und Links