Как добавить один 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()
это впоследствии, чтобы восстановить свое состояние.