gpt4 book ai didi

java - Android/Java 慢速网络IO

转载 作者:搜寻专家 更新时间:2023-11-01 08:10:53 25 4
gpt4 key购买 nike

我有一个应用程序正在尝试下载文件。我正在使用 HTTPUrlConnection 进行下载。最初下载速度很慢。

我通过使用缓冲输入流并将缓冲区大小从 1024 增加到 8192 来提高性能。将缓冲区增加到 8192 以上并没有带来任何改进。

这是一个 fragment :

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

即使在此之后,与 Android 相比,同一文件在 iPad 上的下载速度要快 2 倍。

我错过了什么吗?

编辑

  1. 甚至在您询问/提及之前,下载就在单独的线程上运行。我确实意识到我不需要缓冲输出,但我稍后会解决这个问题 :)
  2. 关于 bytesToRead:我正在尝试不同的缓冲区大小,最后一个实验是 256KB

最佳答案

requestStatus((int) (downloaded * 100 / fileSize));

这可能是一个可能的瓶颈。在您工作的同一线程中更新状态通常不是一个好主意。您的线程应该正在更新一个 volatile 变量...

variable = (int) (downloaded * 100 / fileSize);

然后您的 UI 线程应该轮询该变量以显示进度。

此外,大多数便宜的 SD 卡速度很慢,写入大文件可能会导致速度变慢。

关于java - Android/Java 慢速网络IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9768254/

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