View a markdown version of this page

의 1.x와 2.x 간의 스트리밍 작업 차이 AWS SDK for Java - AWS SDK for Java 2.x

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

의 1.x와 2.x 간의 스트리밍 작업 차이 AWS SDK for Java

Amazon S3 getObject 및 putObject 메서드 등의 스트리밍 작업은 SDK 버전 2.x에서 비차단 I/O를 지원합니다. 따라서 요청 및 응답 모델 객체는 더 이상 InputStream을 파라미터로 사용하지 않습니다. 대신 동기식 요청의 경우 요청 객체가 RequestBody(바이트 스트림)를 허용합니다. 동등한 비동기식 요청은 AsyncRequestBody를 허용합니다.

예 1.x에서의 아마존 S3 putObject 작업
s3client.putObject(BUCKET, KEY, new File(file_path));
예 2.x에서의 Amazon S3 putObject 작업
s3client.putObject(PutObjectRequest.builder() .bucket(BUCKET) .key(KEY) .build(), RequestBody.of(Paths.get("myfile.in")));

스트리밍 응답 객체는 V2에서 동기식 클라이언트의 경우 ResponseTransformer, 비동기식 클라이언트의 경우 AsyncResponseTransformer를 허용합니다.

예 1.x에서의 아마존 S3 getObject 작업
S3Object o = s3.getObject(bucket, key); S3ObjectInputStream s3is = o.getObjectContent(); FileOutputStream fos = new FileOutputStream(new File(key));
예 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 응답 처리 마이그레이션

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. }