Я думаю, что ByteBuffer следует использовать только потому, что у Buffer недостаточно функциональности, чтобы сделать доступ эффективным с точки зрения программиста, а не с точки зрения эффективности.Я сомневаюсь, что есть разница в эффективности, так как базовый код в основном дублируется.
Обратите внимание, что то, что более эффективно, чем использование простых байтовых массивов, не всегда понятно - производительность NIO легко недооценивать.