Я не хочу отвлекать внимание от вашего вопроса, но действительно ли это - хорошая точка оптимизации в вашей программе? Вы проверили с помощью профилировщика, что у вас действительно есть проблема? Ваш вопрос, как указано, подразумевает, что вы не проводили никаких исследований, а просто предполагаете, что у вас будут проблемы с производительностью или памятью при выделении байта []. Поскольку все ответы в этой теме, скорее всего, будут хаки, вы должны действительно убедиться, что у вас на самом деле есть проблема, прежде чем ее исправить.
Возвращаясь к вопросу, если вы хотите сжать данные «на месте» в ByteBuffer, ответ - нет, встроенной в Java возможности нет.
Если вы разместили свой буфер следующим образом:
byte[] bytes = getMyData();
ByteBuffer buf = ByteBuffer.wrap(bytes);
Вы можете отфильтровать свой байт [] через ByteBufferInputStream, как предлагалось в предыдущем ответе.