gpt4 book ai didi

java - 如何提高通过 HttpURLConnection 下载时的下载速度?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:54:32 25 4
gpt4 key购买 nike

我正在使用 HttpURLConnection 从我的网络服务器下载一个 *.rar 文件。当通过 Java/HttpURLConnection 运行下载时,我添加了一些临时代码行来粗略测量(这是非常不准确的)下载速度。下载速度大约在 400kb/s 和 2mb/s 之间波动。

通过我的浏览器 (Mozilla FireFox) 下载相同的文件,我得到了我的网络服务器支持的完整 12.5mb/s。使用 FireFox 我在大约 6 秒内下载文件,而 Java 代码在 12-30 秒内下载文件。

这是我正在测试的经过清理的代码片段,只是为了说明尝试下载文件的方法。

[...]

httpConn = (HttpURLConnection) (new URL(downloadURL)).openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Cookie", cookie);

[...]

try (InputStream is = httpConn.getInputStream();
FileOutputStream fos = new FileOutputStream(targetFile)) {

int bytesRead;
byte[] buffer = new byte[4096];
while ((bytesRead = is.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
}

[...]

我假设这段代码中某处存在我无法掌握的瓶颈。

如何最大限度地提高下载速度?

最佳答案

问题是缓冲区大小。将缓冲区大小从 byte[4096] 增加到 byte[256000] 显着提高了下载速度。此外,我减少了 while ((bytesRead = is.read(buffer)) != -1) 循环中的 I/O 操作,它包含一个进度条更新,通过让它在自己的线程中运行.

感谢@Joachim Isaksson,他在上面的评论中指出了缓冲区瓶颈。

关于java - 如何提高通过 HttpURLConnection 下载时的下载速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35975749/

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