2010-01-29 17 views
17

Il mio background è .net, sono abbastanza nuovo in Java. Sto facendo del lavoro per il team java della nostra azienda e l'architetto ha bisogno di me per implementare un metodo che prende un oggetto InputStream (java.io). Per soddisfare lo scopo del metodo ho bisogno di convertirlo in un array di byte. C'è un modo semplice per farlo?In Java, come posso convertire un InputStream in un array di byte (byte [])?

+0

Tenere presente che potrebbe trattarsi di un hogging della memoria. – BalusC

risposta

51

Il modo più semplice è quello di creare un nuovo ByteArrayOutputStream, copiare i byte a questo, e quindi chiamare toByteArray:

public static byte[] readFully(InputStream input) throws IOException 
{ 
    byte[] buffer = new byte[8192]; 
    int bytesRead; 
    ByteArrayOutputStream output = new ByteArrayOutputStream(); 
    while ((bytesRead = input.read(buffer)) != -1) 
    { 
     output.write(buffer, 0, bytesRead); 
    } 
    return output.toByteArray(); 
} 
+0

Assicurati di svuotare il flusso di uscita prima di tornare. – quikchange

+5

@quikchange: non è necessario quando si utilizza un ByteArrayOutputStream - dove verrà memorizzato il buffer? –

9

Un modo semplice sarebbe quella di utilizzare org.apache.commons.io.IOUtils.toByteArray(inputStream), vedere apache commons io.

Problemi correlati