gpt4 book ai didi

java - HttpURLConnection 断开连接缓慢 - Java/Android

转载 作者:行者123 更新时间:2023-12-01 12:37:45 25 4
gpt4 key购买 nike

我想获取远程连接上文件的文件大小,而无需实际下载(大)文件。我正在使用文件的“Content-Length” header 。相关代码为:

URL obj = new URL(FILES_URL + fileName);

String contentLength = "";
HttpURLConnection conn = null;

try {
conn = (HttpURLConnection) obj.openConnection();
conn.setConnectTimeout(3000);
conn.setReadTimeout(3000);
contentLength = conn.getHeaderField("Content-Length");
int responseCode = conn.getResponseCode();
Log.d(TAG, "responseCode: " + responseCode);
} finally {
Log.d(TAG, "pre-disconnect");
if (conn!=null) conn.disconnect();
Log.d(TAG, "post-disconnect");
}

return contentLength;

命令“conn.disconnect();”有时似乎需要永远。我看了23秒!诚然,这是连接到运行网络服务器的辅助本地设备,但 WiFi 信号很强,速度相对较快,而且我在笔记本电脑上使用“curl”时从未遇到过任何此类问题。我也无法控制我正在连接的网络服务器。

当相继对不同的文件进行多个相似的连接时,该问题可能会加剧,但不确定。然而,这是创建全新的HttpURLConnection,而不是重用旧的。重用连接有帮助吗?

我从未真正下载过文件或访问输入流。

我可以不调用断开连接,但我知道不建议这样做,因为资源不会被释放。这不正确吗?我注意到 URLConnection 没有断开连接。只是建议关闭您打开的所有流。

此代码位于异步任务中。我想我可以尝试将断开连接调用本身移至另一个异步任务,因为之后我不执行任何操作。不确定这是否可能。

你有什么建议吗?我是否应该尝试 HttpURLConnection 以外的其他方法来获取文件大小而不下载文件?

最佳答案

感谢评论中的 EJP。将请求方法更改为“HEAD”使断开连接几乎是瞬时的:

conn.setRequestMethod("HEAD");

据我所知,如果尚未读取,HttpURLConnection.disconnect() 将跳过整个响应对象。因此,对于非常大的文件,需要很长时间。使用请求方法“HEAD”强制响应正文为空并解决问题。

关于java - HttpURLConnection 断开连接缓慢 - Java/Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25423546/

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