【发布时间】:2015-04-22 02:24:22
【问题描述】:
欢迎
我需要从服务器同步(一次一个)下载许多小的远程图像(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例如。
我的下载算法有问题吗?可以改进吗?
谢谢
【问题讨论】:
-
将它们添加到zip文件中,您可以下载并从代码中提取!
-
1.尝试在 InputStream 之上使用 BufferedInputStream。 2.如果以后不需要读取png数据,直接为Bitmap.decode手工BufferedInputStream。
-
我不认为“欢迎”意味着你认为它的意思。
-
Harism,为什么我应该使用缓冲而不是普通输入?我测试了它,似乎速度相等
标签: java android url inputstream urlconnection