NullPointerException
NullPointerException

Reputation: 37635

Best way to download remote images without third party libraries?

I need to download synchronously (one at time) a lot of small remote images (between 50kb and 100kb) from a server and to store them as PNG in the device. I need to achieve this without third party libraries and I'm using this code but it is too munch slow:

        URL javaUrl = new URL(URLParser.parse(this.url));
        URLConnection connection = javaUrl.openConnection();
        
        InputStream input = new BufferedInputStream(javaUrl.openStream());
        ByteArrayOutputStream output = new ByteArrayOutputStream();

        byte data[] = new byte[1024];
        long total = 0;
        int count;
        while ((count = input.read(data)) != -1) {
            total += count;
            output.write(data, 0, count);
        }
        
        // conversion to bitmap
        InputStream in = new ByteArrayInputStream(output.toByteArray());
        Bitmap original = BitmapFactory.decodeStream(in);
        
        // storing bitmap as PNG file
        FileOutputStream out = new FileOutputStream(filename);
        original.compress(Bitmap.CompressFormat.PNG, 90, out);

        output.flush();
        output.close();
        input.close();
        in.close();
        original.recycle(); 

The problem is that the download is very slow. With very fast WiFi internet in the device (13MB, download speed of 1.4mbytes/s), it is taking 3-4 seconds to download the image in the device, but only 100-200ms to download the image in my PC using Google Chrome for example.

It is something wrong in my download algorithm? Can it be improved?

Upvotes: 0

Views: 535

Answers (1)

Kayaman
Kayaman

Reputation: 73558

You have a totally unnecessary byte array in the middle. BitmapFactory.decodeStream() accepts an InputStream and you get an InputStream from URL.openStream().

It might not give you the speed boost you're looking for, but it'll at least get rid of a completely useless step in your code.

Upvotes: 1

Related Questions