Я написал небольшой фрагмент кода, который загружает файл с использованием OkHttp3
и сообщает о прогрессе через прослушиватель, для этого я использовал пример реализации, предоставленной в рецепте здесь .Теперь, чтобы проверить это, я использую MockWebServer
, моя проблема в том, что если тело MockResponse
маленькое, фактический прогресс не будет сообщаться.Чтобы получить большое тело ответа, я попробовал 2 подхода:
Наличие тела ответа, превышающего размер внутреннего буфера:
val bytes = ByteArray(10000)
Random().nextBytes(bytes)
server.enqueue(MockResponse()
.setResponseCode(200)
.setBody(bytes.toByteString().utf8()))
В этом случае тольковозвращается один ответ, или, другими словами, ForwardingSource#read
вызывается только один раз.
Вызов setChunkedBody
, это заставит ForwardingSource#read
быть вызванным несколько раз до ответапрочитано полностью:
val bytes = ByteArray(1024)
Random().nextBytes(bytes)
server.enqueue(MockResponse()
.setResponseCode(200)
.setChunkedBody(bytes.toByteString().utf8(), 256))
Проблема в том, что content-length
равен -1, поэтому прогресс не может быть рассчитан.
Как это можно решить?