Длиной массива размер ByteBuffer
' s, которая генерируется, но не равна количеству символов, которые вы кодируете. Давайте посмотрим, как мы выделяем память для ByteBuffer
...
Если просверлить в метод encode()
, вы обнаружите, что CharsetEncoder#encode(CharBuffer)
выглядит следующим образом:
public final ByteBuffer encode(CharBuffer in)
throws CharacterCodingException
{
int n = (int)(in.remaining() * averageBytesPerChar());
ByteBuffer out = ByteBuffer.allocate(n);
...
По моему отладчиком, то averageBytesPerChar
UTF_8$Encoder
- 1.1
, а на входе String
- 11
символов. 11 * 1.1 = 12.1
, а код бросает в общей сложности на int
, когда он делает расчет, поэтому результирующий размер ByteBuffer
равно 12.
Я подозреваю, что сеть из-за этого, чтобы не использовать метод ByteBuffer.array без первого тщательно чтение документации. –
Я очень удивлен, что у вас есть открытый доступ к базовому массиву вообще, вместо того, чтобы быть вынужденным использовать методы get и put. – azurefrog