Преобразование DataHandler в байт []
Мне нужен фрагмент кода для конвертации DataHandler
в byte[]
,
Этот обработчик данных содержит Image
,
5 ответов
Решение
Это можно сделать с помощью приведенного ниже кода без особых усилий с помощью Apache IO Commons.
final InputStream in = dataHandler.getInputStream();
byte[] byteArray=org.apache.commons.io.IOUtils.toByteArray(in);
Вы можете сделать это так:
public static byte[] toBytes(DataHandler handler) throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
handler.writeTo(output);
return output.toByteArray();
}
private static final int INITIAL_SIZE = 1024 * 1024;
private static final int BUFFER_SIZE = 1024;
public static byte[] toBytes(DataHandler dh) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream(INITIAL_SIZE);
InputStream in = dh.getInputStream();
byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead;
while ( (bytesRead = in.read(buffer)) >= 0 ) {
bos.write(buffer, 0, bytesRead);
}
return bos.toByteArray();
}
Помните, что ByteArrayOutputStream.toByteArray() создает копию внутреннего байтового массива.
Я использую этот код:
public static byte[] getContentAsByteArray(DataHandler handler) throws IOException {
byte[] bytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
handler.writeTo(bos);
bos.flush();
bos.close();
bytes = bos.toByteArray();
return bytes;
}
Это то, что вы ищете?
public static byte[] getBytesFromDataHandler(final DataHandler data) throws IOException {
final InputStream in = data.getInputStream();
byte out[] = new byte[0];
if(in != null) {
out = new byte[in.available()];
in.read(out);
}
return out;
}
ОБНОВИТЬ:
Судя по комментарию dkarp, это неверно. Согласно документам для InputStream
:
Возвращает количество байтов, которые могут быть прочитаны (или пропущены) из этого входного потока без блокировки следующим вызывающим объектом метода для этого входного потока. Следующим абонентом может быть тот же поток или другой поток.
Похоже, у Кости правильный ответ здесь.