преобразование DataHandler в байт [] - PullRequest
10 голосов
/ 12 января 2011

Мне нужен фрагмент кода для преобразования DataHandler в byte[].

Этот обработчик данных содержит Image.

Ответы [ 5 ]

26 голосов
/ 13 января 2011

Это можно сделать с помощью приведенного ниже кода без особых усилий с помощью Apache IO Commons.

final InputStream in = dataHandler.getInputStream();
byte[] byteArray=org.apache.commons.io.IOUtils.toByteArray(in);
12 голосов
/ 20 апреля 2012

Вы можете сделать это так:

public static byte[] toBytes(DataHandler handler) throws IOException {
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    handler.writeTo(output);
    return output.toByteArray();
}
4 голосов
/ 12 января 2011
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 () создает копию внутреннего байтового массива.

2 голосов
/ 10 апреля 2013

Я использую этот код:

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;
}
0 голосов
/ 12 января 2011

Это то, что вы ищете?

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:

Возвращает количество байтов, которые могут быть прочитаны (или пропущены) из этого входного потока без блокировки следующим вызывающим объектом метода для этого входного потока.Следующим абонентом может быть тот же поток или другой поток.

Похоже, у Кости правильный ответ здесь.

...