Преобразование ByteBuffer в байтовый массив java

Кто-нибудь знает, как преобразовать ByteBuffer в массив byte []? Мне нужно получить массив байтов из моего ByteBuffer. Когда я запускаю bytebuffer.hasArrray(), он возвращает no. Каждый вопрос, который я смотрел до сих пор, заключается в преобразовании байтового массива в byteBuffer, но мне это нужно по-другому. Спасибо.

Ответ 1

ByteBuffer предоставляет массовый метод get(byte[]), который передает байты из буфера в массив. Вам понадобится создать массив длины, равный количеству оставшихся байтов в буфере.

ByteBuffer buf = ...
byte[] arr = new byte[buf.remaining()];
buf.get(arr);

Ответ 2

Если hasArray() сообщает false, то вызов array() вызовет исключение.

В этом случае единственным способом получить данные в byte[] является выделение byte[] и копирование байтов в byte[] с помощью get(byte) или подобных.

Ответ 3

Простой образец работает.

    ByteBuffer bb1 =  ByteBuffer.wrap("hello world".getBytes());
    System.out.println(bb1.hasArray());
    System.out.println(new String(bb1.array()));

Однако вы говорите, что массив возвращает false. Может быть прочитано только.

/**
 * Tells whether or not this buffer is backed by an accessible byte
 * array.
 *
 * <p> If this method returns <tt>true</tt> then the {@link #array() array}
 * and {@link #arrayOffset() arrayOffset} methods may safely be invoked.
 * </p>
 *
 * @return  <tt>true</tt> if, and only if, this buffer
 *          is backed by an array and is not read-only
 */
public final boolean hasArray() {
    return (hb != null) && !isReadOnly;
}