Кто-нибудь знает, как преобразовать ByteBuffer в массив byte []? Мне нужно получить массив байтов из моего ByteBuffer
. Когда я запускаю bytebuffer.hasArrray()
, он возвращает no. Каждый вопрос, который я смотрел до сих пор, заключается в преобразовании байтового массива в byteBuffer, но мне это нужно по-другому.
Спасибо.
Преобразование ByteBuffer в байтовый массив java
Ответ 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;
}