java.net.URL read stream to byte[] java.net.URL read stream to byte[] arrays arrays

java.net.URL read stream to byte[]


There's no guarantee that the content length you're provided is actually correct. Try something akin to the following:

ByteArrayOutputStream baos = new ByteArrayOutputStream();InputStream is = null;try {  is = url.openStream ();  byte[] byteChunk = new byte[4096]; // Or whatever size you want to read in at a time.  int n;  while ( (n = is.read(byteChunk)) > 0 ) {    baos.write(byteChunk, 0, n);  }}catch (IOException e) {  System.err.printf ("Failed while reading bytes from %s: %s", url.toExternalForm(), e.getMessage());  e.printStackTrace ();  // Perform any other exception handling that's appropriate.}finally {  if (is != null) { is.close(); }}

You'll then have the image data in baos, from which you can get a byte array by calling baos.toByteArray().

This code is untested (I just wrote it in the answer box), but it's a reasonably close approximation to what I think you're after.


Just extending Barnards's answer with commons-io. Separate answer because I can not format code in comments.

InputStream is = null;try {  is = url.openStream ();  byte[] imageBytes = IOUtils.toByteArray(is);}catch (IOException e) {  System.err.printf ("Failed while reading bytes from %s: %s", url.toExternalForm(), e.getMessage());  e.printStackTrace ();  // Perform any other exception handling that's appropriate.}finally {  if (is != null) { is.close(); }}

http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#toByteArray(java.io.InputStream)


Here's a clean solution:

private byte[] downloadUrl(URL toDownload) {    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();    try {        byte[] chunk = new byte[4096];        int bytesRead;        InputStream stream = toDownload.openStream();        while ((bytesRead = stream.read(chunk)) > 0) {            outputStream.write(chunk, 0, bytesRead);        }    } catch (IOException e) {        e.printStackTrace();        return null;    }    return outputStream.toByteArray();}