我有一个应用程序,我试图下载一个文件。我正在使用HTTPUrlConnection下载。一开始,下载速度是缓慢的。
我使用缓冲输入流并将缓冲区大小从1024增加到8192,从而提高了性能。在此之后增加缓冲区并没有带来任何改善。
下面是一个片段:
InputStream inputStream = (InputStream) new URL(requestURL)
.getContent();
BufferedInputStream bufferedInputStream = new BufferedInputStream(
inputStream);
OutputStream outputStream = new FileOutputStream(fileSaveUrl);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
outputStream);
int bytesToRead = 1024 * 256;
byte buffer[] = new byte[bytesToRead];
while ((count = bufferedInputStream.read(buffer)) != -1
&& !isCancelled()) {
requestStatus((int) (downloaded * 100 / fileSize));
bufferedOutputStream.write(buffer, 0, count);
}即使在此之后,与安卓相比,同一文件在iPad上的下载速度也要快2倍。
我是不是遗漏了什么?
编辑
bytesToRead:我在试验不同的缓冲区大小,最后一次实验是256 to 发布于 2012-03-23 20:43:31
问题是我在同一线程上下载和写入SD卡。使用阻塞队列缓冲区将工作分成两个线程,以提高性能。
发布于 2012-03-19 15:13:23
requestStatus((int) (downloaded * 100 / fileSize));这可能是一个可能的瓶颈。在执行工作的同一线程中更新状态通常不是一个好主意。您的线程应该更新一个易失性变量..。
variable = (int) (downloaded * 100 / fileSize);然后,您的UI线程应该轮询该变量以显示进度。
而且,大多数廉价的SD卡都很慢,给它们写信可能会导致大文件的速度减慢。
https://stackoverflow.com/questions/9768254
复制相似问题