Я много искал и проверил несколько ответов ... ни один из них мне не ясен.
В Java есть ByteBuffer. Имеет 2 вкуса. 1 прямой, а другой непрямой. Прямой буфер хорош для ввода-вывода.
Зачем нужен непрямой байтовый буфер, когда у нас есть byte[]? Когда это использовать?
В этом есть смысл. Это единственный вариант использования?
Непрямые ByteBuffers хранятся в куче и поддерживаются базовым массивом байтов. Обычно они используются, когда вам нужен буфер, доступный для чтения и записи приложением Java, но не требующий такого же уровня производительности, как прямой ByteBuffer.
Так почему бы не всегда использовать прямой ByteBuffer?
Я знаю, что непрямой буфер хранится в куче и может использовать базовый байт []. Мой вопрос очень специфичен для того, в каком сценарии это можно было бы сделать? кто бы сказал no за преимущества производительности?
Я отредактировал комментарий, надеюсь, теперь стало понятнее, в чем разница между ними.
В приведенном выше ответе много неверной информации. 1: DirectByteBuffer — это сборщик мусора, как и версия onheap. 2: байтовые буферы onheap также не являются потокобезопасными. 3: сложность с прямыми байтовыми буферами — это нативный код, который намного проще по сравнению с кучей один раз, потому что вы можете просто получить указатель на базовую память и передать его.
4: байтовые буферы onheap также могут увеличить задержку; например при работе с сокетами их сначала нужно скопировать в прямой байтовый буфер, прежде чем их можно будет передать в сокет. При непосредственном использовании directbytebuffer этот шаг копирования пропускается.
Общий интерфейс, поэтому вы можете использовать byte[] всякий раз, когда это необходимо, без if_elsing