Насколько я понимаю, он ничего не использует. Он просто предполагает, что он уже правильно декодирован как строка для Java, что означает UTF-16. Это можно показать, посмотрев на источник для HeapByteBuffer, где, наконец, возвращается возвращенный charbuffer (версия с прямым порядком байтов):
static private char makeChar(byte b1, byte b0) {
return (char)((b1 << 8) | (b0 & 0xff));
}
Так что единственное, что здесь обрабатывается, это порядковый номер остального, за который вы несете ответственность. Это также означает, что обычно гораздо полезнее использовать класс Decoder, где вы можете указать кодировку.