Как добавить один ByteBuffer к другому?

Предположим, что у меня есть 2 ByteBuffer, содержащих несколько байтов... Как было бы наилучшим способом добавить все содержимое одного ByteBuffer с другим? Я делаю это, но он генерирует исключение BufferUnderFlowException:

ByteBuffer allData = ByteBuffer.allocate(999999);
ByteBuffer buff = null;
for (int i = 0; i < n; i++) {
    buff = aMethodThatReturnsAFilledByteBuffer();
    allData.put(buff);
}

Что я делаю не так? Заранее спасибо.

1 ответ

Вот как это работает:

ByteBuffer.allocate(byteBuffer.limit() + byteBuffer2.limit())
        .put(byteBuffer)
        .put(byteBuffer2)
        .rewind())

Вам нужно flip() исходный буфер перед любой операцией, которая подразумевает get() операция, такая как write()или используя его в качестве источника put() операция в другой буфер. Вам также нужно compact() это впоследствии, чтобы восстановить свое состояние.

Другие вопросы по тегам