没有第三方库的最佳下载远程图像的方法?

时间:2015-02-20 11:57:59

标签: java android url inputstream urlconnection

欢迎

我需要从服务器同步下载(一次一个)许多小型远程图像(50kb到100kb之间)并将它们作为PNG存储在设备中。我需要在没有第三方库的情况下实现这一点,并且我使用此代码但是它太慢了:

        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(); 

问题是下载速度很慢。在设备中使用非常快的WIFI互联网(13MB,下载速度为1.4mbytes / s),在设备中下载图像需要3-4秒,但使用谷歌浏览器在我的PC中下载图像只需要100-200ms例如。

我的下载算法有问题吗?可以改进吗?

由于

1 个答案:

答案 0 :(得分:1)

中间有一个完全不必要的字节数组。 BitmapFactory.decodeStream()接受InputStream,您从InputStream获得URL.openStream()

它可能无法为您提供所需的速度提升,但它至少会消除您代码中完全没用的步骤。