

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 의 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에서의 아마존 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에서의 아마존 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 응답의 멤버 한 명 후에가 중지될 `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.
}
```