La lunghezza della matrice è la dimensione del ByteBuffer
' s capacità, che è generata da, ma non è uguale al numero di caratteri che stai codificando. Diamo uno sguardo a come ci allocare memoria per un ByteBuffer
...
Se si punta al metodo encode()
, vi accorgerete che CharsetEncoder#encode(CharBuffer)
assomiglia a questo:
public final ByteBuffer encode(CharBuffer in)
throws CharacterCodingException
{
int n = (int)(in.remaining() * averageBytesPerChar());
ByteBuffer out = ByteBuffer.allocate(n);
...
Secondo il mio debugger, il averageBytesPerChar
di un UTF_8$Encoder
è 1.1
e l'input String
ha 11
caratteri. 11 * 1.1 = 12.1
, e il codice getta il totale a un int
quando lo fa il calcolo, quindi la dimensione risultante del ByteBuffer
è 12.
Ho il sospetto che la rete da questo è di non utilizzare il metodo ByteBuffer.array senza prima con attenzione leggendo la documentazione –
Sono abbastanza sorpreso che tu abbia un accesso pubblico al backing array, piuttosto che essere costretto a usare i metodi get e put. – azurefrog