You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HttpURLConnection的getInputStream耗时过长,如何提升响应速度?

优化HttpURLConnection获取JSON响应的速度问题

针对你遇到的getInputStream()耗时过长的问题,可以从以下几个方向优化:

1. 启用HTTP连接复用

HttpURLConnection默认支持连接复用,但显式设置请求头可确保连接被复用,避免重复建立TCP连接的开销:

val urlStr= "https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1"
val urlCon = URL(urlStr).openConnection() as HttpURLConnection
// 启用长连接
urlCon.setRequestProperty("Connection", "keep-alive")
urlCon.setRequestProperty("Keep-Alive", "300")

2. 合理设置超时参数

默认超时时间过长会导致不必要的等待,明确设置连接超时和读取超时:

urlCon.connectTimeout = 1000 // 连接超时1秒
urlCon.readTimeout = 1000    // 读取超时1秒

3. 优化IO读取逻辑

原代码的逐行拼接可替换为更高效的批量读取方式,同时确保资源自动释放:

val conInputStream = urlCon.inputStream
val jsonString = BufferedReader(InputStreamReader(conInputStream, "UTF-8")).use { it.readText() }

use块会自动关闭流,readText()内部做了读取优化,比逐行拼接更高效。

4. 禁用不必要的自动重定向

如果目标URL不会跳转,关闭自动重定向减少额外请求开销:

urlCon.instanceFollowRedirects = false

5. 替换为更高效的HTTP客户端

HttpURLConnection属于较老旧的实现,换成OkHttp这类现代客户端能大幅提升性能——它默认支持连接池、HTTP/2、自动重试等优化:

val client = OkHttpClient.Builder()
    .connectTimeout(1, TimeUnit.SECONDS)
    .readTimeout(1, TimeUnit.SECONDS)
    .build()

val request = Request.Builder()
    .url("https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1")
    .build()

client.newCall(request).execute().use { response ->
    if (!response.isSuccessful) throw IOException("请求失败: $response")
    val jsonString = response.body?.string()
}

额外排查点

如果以上优化后仍慢,可以检查DNS解析耗时——部分场景下DNS缓存失效或解析慢会拖慢整个请求,可尝试手动指定可靠的DNS服务器,或在本地缓存DNS结果。

内容的提问来源于stack exchange,提问作者timeislikewind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:55:23