

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ストリーミング操作
<a name="streaming-ops"></a>

では AWS SDK for Kotlin、バイナリデータ (ストリーム) は [https://docs.aws.amazon.com/smithy-kotlin/api/latest/runtime-core/aws.smithy.kotlin.runtime.content/-byte-stream/index.html](https://docs.aws.amazon.com/smithy-kotlin/api/latest/runtime-core/aws.smithy.kotlin.runtime.content/-byte-stream/index.html)型として表されます。これはバイトの抽象読み取り専用ストリームです。

## ストリーミングレスポンス
<a name="streaming-responses"></a>

バイナリストリーム (Amazon Simple Storage Service (Amazon S3) [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) API オペレーションなど) を使用したレスポンスは、他の方法とは異なる方法で処理されます。これらのメソッドは、レスポンスを直接返すのではなく、レスポンスを処理する Lambda 関数を使用します。これにより、関数へのレスポンスの範囲が制限され、呼び出し元と SDK ランタイムの両方のライフタイム管理が簡素化されます。

Lambda 関数が戻ると、基盤となる HTTP 接続などのリソースが解放されます。(Lambda が戻った後は にアクセス`ByteStream`しないでください。また、閉鎖から渡さないでください）。呼び出しの結果は、Lambda が返すものです。

次のコード例は、レスポンスを処理する Lambda パラメータを受信する [getObject](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3/-s3-client/get-object.html) 関数を示しています。

```
val s3Client = S3Client.fromEnvironment()
val req = GetObjectRequest { ... }

val path = Paths.get("/tmp/download.txt")

// S3Client.getObject has the following signature:
// suspend fun <T> getObject(input: GetObjectRequest, block: suspend (GetObjectResponse) -> T): T

val contentSize = s3Client.getObject(req) { resp ->
    // resp is valid until the end of the block.
    // Do not attempt to store or process the stream after the block returns.
    
    // resp.body is of type ByteStream.
    val rc = resp.body?.writeToFile(path)
    rc
}
println("wrote $contentSize bytes to $path")
```

`ByteStream` タイプには、一般的な使用方法として次の拡張機能があります。
+ `ByteStream.writeToFile(file: File): Long`
+ `ByteStream.writeToFile(path: Path): Long`
+ `ByteStream.toByteArray(): ByteArray`
+ `ByteStream.decodeToString(): String`

これらはすべて `aws.smithy.kotlin.runtime.content`パッケージで定義されています。

## ストリーミングリクエスト
<a name="streaming-requests"></a>

を指定するには`ByteStream`、次のような便利な方法もあります。
+ `ByteStream.fromFile(file: File)`
+ `File.asByteStream(): ByteStream`
+ `Path.asByteStream(): ByteStream`
+ `ByteStream.fromBytes(bytes: ByteArray)`
+ `ByteStream.fromString(str: String)`

これらはすべて `aws.smithy.kotlin.runtime.content`パッケージで定義されています。

次のコード例は、[PutObjectRequest](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3.model/-put-object-request/index.html) の作成時に本文プロパティを提供する`ByteStream`便利なメソッドの使用を示しています。

```
val req = PutObjectRequest {
    ...
    body = ByteStream.fromFile(file)
    // body = ByteStream.fromBytes(byteArray)
    // body = ByteStream.fromString("string")
    // etc
}
```