gpt4 book ai didi

android - 如何使用 OkHTTP 测量下载速度?

转载 作者:行者123 更新时间:2023-11-30 05:05:21 27 4
gpt4 key购买 nike

我正在使用OkHttp3 下载文件,我想看看下载速度。但我对如何测量速度感到困惑。

我尝试在读取缓冲区之前获取当前毫秒数并在写入缓冲区后进行计算,但它总是返回一个静态值。

以下是我的下载功能。

fun download(fileName: String) {
val request = Request.Builder().url(url)
.get().build()
val call = OkHttpClient().newCall(request)
val response = call.execute()

if (response.isSuccessful) {
var inputStream: InputStream? = null

try {
inputStream = response.body()?.byteStream()
val buffer = ByteArray(8192)
val mediaFile = File(downloadDir, fileName)
val output = RandomAccessFile(mediaFile, "rw")
output.seek(0)

while (true) {
val readed = inputStream?.read(buffer)

if (readed == -1 || readed == null) {
break
}

output.write(buffer, 0, readed)
downloaded.append(readed.toLong())
}
output.close()
} catch (e: IOException) {
// TODO: handle IOException
console.log("${e.message}")
} finally {
inputStream?.close()
}
}
}

最佳答案

这是一个很简单的问题,我想多了就糊涂了。无论如何,这就是解决方案。

我需要做的就是在 1s 之后将下载的字节存储在一个变量中,从新下载的字节中减去下载的字节,这将在 1s 中得到下载的字节,然后我可以使用这些字节将速度转换为 kbpsMbps

fun getSpeed(callback: (String) -> Unit) {
doAsync {
var prevDownloaded = 0L
while (true) {
if (contentLength != null) {
if (downloaded.get() >= contentLength!!) {
break
}
}

if (prevDownloaded != 0L) {
callback(formatBytes(downloaded.get() - prevDownloaded))
}
prevDownloaded = downloaded.get()
Thread.sleep(1000)
}
}
}

关于android - 如何使用 OkHTTP 测量下载速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54667228/

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