ほとんどのレスポンスデータはメモリ上に完全な状態で保持されます。 一方で、ストリーミングデータとしてフェッチすることもできます。
ストリーミングを行うためには複数の方法がありますが、最も安全な方法はスコープ付きの execute
ブロックで
HttpStatement を用いる方法です。
client.get<HttpStatement>.execute { response: HttpResponse ->
// レスポンスはこの時点ではダウンロードされない
val channel = response.receive<ByteReadChannel>()
}
execute
ブロックを抜けると、ネットワークリソースは開放されます。
execute
メソッドに別の型を指定することもできます。
client.get<HttpStatement>.execute<ByteReadChannel> { channel: ByteReadChannel ->
// ...
}