ストリーミングデータを扱う

Estimated reading time: 1 minute

ほとんどのレスポンスデータはメモリ上に完全な状態で保持されます。 一方で、ストリーミングデータとしてフェッチすることもできます。

スコープ付きストリーミング

ストリーミングを行うためには複数の方法がありますが、最も安全な方法はスコープ付きの execute ブロックで HttpStatement を用いる方法です。

client.get<HttpStatement>.execute { response: HttpResponse ->
    // レスポンスはこの時点ではダウンロードされない
    val channel = response.receive<ByteReadChannel>()
}

execute ブロックを抜けると、ネットワークリソースは開放されます。

execute メソッドに別の型を指定することもできます。

client.get<HttpStatement>.execute<ByteReadChannel> { channel: ByteReadChannel ->
    // ...
}