2011-01-12 3 views

ответ

22

Это можно сделать, используя код ниже без особых усилий, используя apache IO Commons.

final InputStream in = dataHandler.getInputStream(); 
byte[] byteArray=org.apache.commons.io.IOUtils.toByteArray(in); 

Спасибо,
нарендра

0

Что-то вроде этого, что вы ищете?

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; 
} 

UPDATE:

Основываясь на комментарий dkarp в это неверно. Согласно документации для InputStream:

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

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

+1

'InputStream.available()' является не подходит для этой цели. «PipedInputStream», возвращаемый из «DataHandler», возвращает количество байтов, доступных в его буфере, прежде чем он блокирует, а не общий размер. – dkarp

+0

Интересно. Я видел этот код во многих местах при работе с веб-службами. – Casey

+0

Обновлено, спасибо. – Casey

4
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() создает копию внутреннего массива байтов.

11

Вы можете сделать это следующим образом:

public static byte[] toBytes(DataHandler handler) throws IOException { 
    ByteArrayOutputStream output = new ByteArrayOutputStream(); 
    handler.writeTo(output); 
    return output.toByteArray(); 
} 
1

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

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

операция закрытия должна быть в условии finally или вы должны использовать попытку try 7 Java. –

Смежные вопросы