我正在尝试在 Kotlin 中下载大文件(<1GB),因为我已经知道我在使用 okhttp 并且几乎遵循了这个问题的答案。除了我使用 Kotlin 而不是 java,所以语法略有不同。
val client = OkHttpClient()
val request = Request.Builder().url(urlString).build()
val response = client.newCall(request).execute()
val is = response.body().byteStream()
val input = BufferedInputStream(is)
val output = FileOutputStream(file)
val data = ByteArray(1024)
val total = 0L
val count : Int
do {
count = input.read(data)
total += count
output.write(data, 0, count)
} while (count != -1)
output.flush()
output.close()
input.close()
它的工作原理是它在不使用太多内存的情况下下载文件,但它似乎不必要地无效,因为它不断尝试写入更多数据而不知道是否有新数据到达。在资源非常有限的 VM 上运行它时,我自己的测试似乎也证实了这一点,因为它似乎使用了更多的 CPU,同时下载速度低于 python 中的类似脚本,并且原因使用wget.
我想知道是否有一种方法可以让我在 x 字节可用时调用回调,或者它是否是文件的末尾,这样我就不必在不知道是否存在的情况下不断尝试获取更多数据是任何。
编辑:如果 okhttp 不可能,我使用其他东西没有问题,只是它是我习惯的 http 库。
浮云间
慕慕森
相关分类