

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Diferenças de operação de streaming entre 1.x e 2.x do AWS SDK para Java
<a name="migration-streaming-ops"></a>

As operações de streaming, como Amazon S3 `getObject` e `putObject` métodos, oferecem suporte ao não bloqueio I/O na versão 2.x do SDK. Como resultado, os objetos de modelo de solicitação e resposta não usam mais `InputStream` como parâmetro. Em vez disso, para solicitações síncronas, o objeto de solicitação aceita `RequestBody`, que é um fluxo de bytes. O equivalente assíncrono aceita um `AsyncRequestBody`.

**Example `da operação PutObject do Amazon S3 em 1.x`**  

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

**Example `da operação PutObject do Amazon S3 em 2.x`**  

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

Em paralelo, o objeto de resposta aceita `ResponseTransformer` para clientes síncronos e `AsyncResponseTransformer` para clientes assíncronos na V2.

**Example da operação `GetObject` do Amazon S3 em 1.x**  

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

**Example da operação `GetObject` do Amazon S3 em 2.x**  

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

No SDK para Java 2.x, as operações de resposta de streaming têm um método `AsBytes` para carregar a resposta na memória e simplificar as conversões de tipos comuns na memória.

## Migrar o tratamento de respostas GZIP concatenadas
<a name="migration-streaming-gzip"></a>

Ao migrar do SDK for Java 1.x, atualize manualmente o código que envolve um fluxo de resposta do S3. `GZIPInputStream` Faça essa alteração se a resposta puder conter vários membros GZIP concatenados. Selecione `ResponseTransformer.toGzipCompatibleInputStream()` ou, para um cliente assíncrono,. `AsyncResponseTransformer.toGzipCompatibleBlockingInputStream()`

Considere o seguinte ao migrar esse código:
+ A ferramenta de migração não seleciona esses transformadores automaticamente.
+ Em algumas versões do JDK, você `GZIPInputStream` pode parar depois de um membro de uma resposta GZIP concatenada. Isso pode acontecer se o próximo fragmento da rede não chegar. O resultado pode ser dados truncados e descompactados sem exceção.
+ Esses transformadores não descomprimem o conteúdo da resposta. Use-os somente ao incluir o stream retornado`GZIPInputStream`. Caso contrário, use `ResponseTransformer.toInputStream()` ou`AsyncResponseTransformer.toBlockingInputStream()`.

Para um cliente síncrono:

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

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

Você pode usar `ResponseTransformer.toGzipCompatibleInputStream(Duration)` para configurar o tempo limite para a primeira operação de leitura.

Para um cliente assíncrono:

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