gpt4 book ai didi

安卓文件下载慢

转载 作者:太空宇宙 更新时间:2023-11-03 12:42:45 26 4
gpt4 key购买 nike

我正在下载我的安卓应用程序。我正在使用本地网络连接,下载速度非常慢。

这是我正在使用的代码:

URL url = new URL(ep.getFileURL());
File destFile = new File(<path to sd card file>);

URLConnection uCon = url.openConnection();
InputStream is = uCon.getInputStream();
OutputStream os = new FileOutputStream(destFile);

int progress = 0;
int lastProgress = 0;
int totalSize = uCon.getContentLength();
int downloadedSize = 0;
byte[] buffer = new byte[4096];
int count = -1;
while((count = is.read(buffer)) != -1)
{
os.write(buffer, 0, count);

downloadedSize = downloadedSize + count;
progress = (int)(downloadedSize * 100.0 / totalSize);
if(progress - lastProgress >= 5) {
publishProgress(progress);
lastProgress = progress;
}
}

os.close();

你发现任何问题了吗?谢谢。

编辑:

我根据您的建议测试了我的代码,得到了这些结果:

# Download times tests #Without bufferedoutputDownloading file:      1 ms, Start downloadDownloading file:      179812 ms, Finished downloading 54687744 bytesDownloading file: end, 179813 msWith bufferedoutputDownloading file:      1 ms, Start downloadDownloading file:      178312 ms, Finished downloading 54687744 bytesDownloading file: end, 178313 msWith httpclientDownloading file: beginDownloading file:      1 ms, Start downloadDownloading file:      178241 ms, Finished downloading 54687744 bytesDownloading file: end, 178242 ms

因此,使用缓冲流或直接使用 HttpClient 不会改变任何东西......

我还应该提到我的代码在 AsyncTask 中,所以 publishProgress() 实际上已经在一个单独的线程上运行了......

感谢您的帮助。

最佳答案

您应该使用 BufferedInputStream 包装您的输入流。您可能会对几个字节进行更浅的读取,而缓冲流将减轻其中的一些影响。我会首先尝试,缓冲输入和输出流以减少操作系统级别的写入延迟。

其次,我会谨慎对待您发布进度的方式。看起来您正在限制它出现的次数,但您可能希望将下载移动到它自己的可运行程序中并使用执行程序服务进行下载,并且可能启动一个额外的线程来评估所有下载的进度并触发进度消息是必要的。

关于安卓文件下载慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4835056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com