Как мы можем выделить прямой буфер обмена, если у нас нет никаких соответствующих методов (allocateDirect) в `CharBuffer` или `Buffer`?

#java #nio #bytebuffer #charbuffer

#java #nio #bytebuffer #буфер обмена #charbuffer

Вопрос:

Почему у нас есть isDirect() метод в CharBuffer?

Как мы можем выделить прямой CharBuffer, если у нас нет никаких соответствующих методов (allocateDirect) в CharBuffer или Buffer ?

Я могу предположить, что это:

 ByteBuffer.alocateDirect(100).asCharBuffer()
  

Так ли это и является ли это единственным (и рекомендуемым) способом сделать это?

Комментарии:

1. Символ не является байтом в Java

2. Я добавил объяснение для суффиксов U / S / R.

3. Вам нужны другие разъяснения?

Ответ №1:

CharBuffer наследует этот метод от Buffer интерфейса вместе со многими другими.
CharBuffer имеет несколько подклассов

введите описание изображения здесь

Например, DirectCharBuffer (ы) возврат true .
Это

 ByteBuffer.allocateDirect(20).asCharBuffer();
  

вернет a DirectCharBuffer , который является a CharBuffer .

*U суффикс для систем с большим окончанием.
*S суффикс для других типов (строчный).
*R суффикс для буферов, доступных только для чтения.


 final CharBuffer cb = ByteBuffer.allocateDirect(20).asCharBuffer();
final boolean direct = cb.isDirect();  // true
  

Так ли это и является ли это единственным (и рекомендуемым) способом сделать это?

ДА.


Для справки, что такое прямой буфер? Смотрите JavaDoc, раздел Прямые и непрямые буферы.