

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

# の 1.x と 2.x のストリーミングオペレーションの違い AWS SDK for Java
<a name="migration-streaming-ops"></a>

Amazon S3 の `getObject` や `putObject` メソッドなどのストリーミングオペレーションは、 SDK のバージョン 2.x でノンブロッキング I/O をサポートしています。その結果、リクエストとレスポンスのモデルオブジェクトでは `InputStream` をパラメータとして使用しなくなりました。代わりに、同期リクエストのリクエストオブジェクトでは、バイト単位のストリームである `RequestBody` を受け付けるようになりました。非同期の場合は `AsyncRequestBody` を受け付けます。

**Example 1.x での Amazon S3 `putObject` オペレーション**  

```
s3client.putObject(BUCKET, KEY, new File(file_path));
```

**Example 2.x での Amazon S3 `putObject` オペレーション**  

```
s3client.putObject(PutObjectRequest.builder()
                                 .bucket(BUCKET)
                                 .key(KEY)
                                 .build(),
                 RequestBody.of(Paths.get("myfile.in")));
```

V2 では、ストリーミングレスポンスオブジェクトは同期クライアントで `ResponseTransformer` を受け付け、非同期クライアントで `AsyncResponseTransformer` を受け付けます。

**Example 1.x での Amazon S3 `getObject` オペレーション**  

```
S3Object o = s3.getObject(bucket, key);
S3ObjectInputStream s3is = o.getObjectContent();
FileOutputStream fos = new FileOutputStream(new File(key));
```

**Example 2.x での Amazon S3 `getObject` オペレーション**  

```
s3client.getObject(GetObjectRequest.builder().bucket(bucket).key(key).build(),
		ResponseTransformer.toFile(Paths.get("key")));
```

SDK for Java 2.x では、ストリーミングレスポンスオペレーションには、レスポンスをメモリにロードし、一般的なタイプのインメモリ変換を簡素化する `AsBytes` メソッドがあります。

## 連結された GZIP レスポンス処理の移行
<a name="migration-streaming-gzip"></a>

SDK for Java 1.x から移行する場合は、 で S3 レスポンスストリームをラップするコードを手動で更新します`GZIPInputStream`。レスポンスに複数の連結 GZIP メンバーを含めることができる場合は、この変更を加えます。非同期クライアントの場合は、 `ResponseTransformer.toGzipCompatibleInputStream()`または を選択します`AsyncResponseTransformer.toGzipCompatibleBlockingInputStream()`。

このコードを移行するときは、次の点を考慮してください。
+ 移行ツールは、これらのトランスフォーマーを自動的に選択しません。
+ 一部の JDK バージョンでは、連結された GZIP レスポンスの 1 つのメンバーの後に を停止`GZIPInputStream`できます。これは、次のネットワークチャンクが到着していない場合に発生する可能性があります。結果は、例外なしで解凍されたデータを切り捨てることができます。
+ これらのトランスフォーマーはレスポンスコンテンツを解凍しません。返されたストリームを でラップする場合にのみ使用します`GZIPInputStream`。それ以外の場合は、 `ResponseTransformer.toInputStream()`または を使用します`AsyncResponseTransformer.toBlockingInputStream()`。

同期クライアントの場合:

```
ResponseInputStream<GetObjectResponse> response =
    s3Client.getObject(
        request,
        ResponseTransformer.toGzipCompatibleInputStream());

try (GZIPInputStream gzipInputStream = new GZIPInputStream(response)) {
    // Read the decompressed response.
}
```

を使用して`ResponseTransformer.toGzipCompatibleInputStream(Duration)`、最初の読み取りオペレーションのタイムアウトを設定できます。

非同期クライアントの場合:

```
CompletableFuture<ResponseInputStream<GetObjectResponse>> responseFuture =
    s3AsyncClient.getObject(
        request,
        AsyncResponseTransformer.toGzipCompatibleBlockingInputStream());

try (ResponseInputStream<GetObjectResponse> response = responseFuture.join();
     GZIPInputStream gzipInputStream = new GZIPInputStream(response)) {
    // Read the decompressed response. Reads block the calling thread.
}
```