2010-01-29 13 views
17

Mi historial es .net, soy bastante nuevo en Java. Estoy trabajando para el equipo de Java de nuestra compañía y el arquitecto me necesita para implementar un método que tome un objeto InputStream (java.io). Para cumplir el propósito del método, necesito convertirlo en una matriz de bytes. ¿Hay una forma fácil de hacer esto?En Java, ¿cómo puedo convertir un InputStream en una matriz de bytes (byte [])?

+0

Tenga en cuenta que esto puede ser acaparamiento de memoria. – BalusC

Respuesta

51

La forma más sencilla es crear un nuevo ByteArrayOutputStream, copiar los bytes de eso, y luego llamar a 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

Asegúrese de enjuagar la salida de salida antes de regresar. – quikchange

+5

@quikchange: no es necesario cuando utilizas un ByteArrayOutputStream, ¿dónde se almacenará? –

9

Una forma sencilla sería utilizar org.apache.commons.io.IOUtils.toByteArray(inputStream), ver apache commons io.

Cuestiones relacionadas