2015-03-09 5 views
1

У меня есть ByteBuffer, и мне нужно добавить его содержимое в запрос POST, чтобы удаленно отображать изображение, которое представляет; но я не могу понять, как это сделать.ByteBuffer to byte array

Делать это не работает:

byteBuffer.array() 

Я попытался преобразовать его в массив байтов, но это не сработало, потому что изображение не показывая должным образом:

Также я думаю о преобразовании его в изображение и получить его массив байтов, но я не знаю, как это сделать, и если он будет работать ...

Любая помощь будет оценена.

+1

'byteBuffer.array()' не работает? Это довольно претензия. – Kayaman

+0

Нет, byteBuffer.array() не формирует изображение правильно, и если я отлаживаю приложение, результатом этого является массив, в котором каждый элемент является значением 0 ... – svprdga

+0

Тогда либо вы ничего не читали в это или вы не отлаживали cirrextly. – EJP

ответ

1

ByteBuffer создан с allocate (не обязательно allocateDirect) должны иметь массив подкладочный, проверьте с hasArray()/isDirect().

byteBuffer.flip(); // Sets limit to current write position. 
int n = byteBuffer.limit(); 
byteBuffer.rewind(); // Already done by flip I think. 
byte[] data = new byte[n]; 
byteBuffer.get(data); 
+0

hasArray() возвращает false. Я пробовал ваш код, byteBuffer.limit() возвращает 0, а конечный массив данных имеет длину 0 ... – svprdga

0
private static byte[] getByteArrayFromByteBuffer(ByteBuffer byteBuffer) { 
    byte[] bytesArray = new byte[byteBuffer.remaining()]; 
    byteBuffer.get(bytesArray, 0, bytesArray.length); 
    return bytesArray; 
}