

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Diferencias en la operación de streaming entre 1.x y 2.x del AWS SDK para Java
<a name="migration-streaming-ops"></a>

Las operaciones de streaming, como Amazon S3 `getObject` y sus `putObject` métodos, admiten el no bloqueo I/O en la versión 2.x del SDK. Como resultado, los objetos del modelo de solicitud y respuesta ya no toman un `InputStream` como parámetro. En su lugar, para solicitudes sincrónicas, el objeto de solicitud acepta `RequestBody`, que es un flujo de bytes. El equivalente asincrónico acepta un `AsyncRequestBody`.

**Example de la operación `PutObject` de Amazon S3 en 1.x**  

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

**Example de la operación `PutObject` de Amazon S3 en 2.x**  

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

Un objeto de respuesta de streaming acepta un `ResponseTransformer` para clientes sincrónicos y un `AsyncResponseTransformer` para asincrónicos en V2.

**Example de la operación `GetObject` de Amazon S3 en 1.x**  

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

**Example de la operación `GetObject` de Amazon S3 en 2.x**  

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

En el SDK para Java 2.x, las operaciones de respuesta de streaming tienen un método `AsBytes` para cargar la respuesta en la memoria y simplificar las conversiones de tipo común en la memoria.

## Migre el manejo concatenado de respuestas de GZIP
<a name="migration-streaming-gzip"></a>

Al migrar desde el SDK for Java 1.x, actualice manualmente el código que incluye un flujo de respuesta de S3. `GZIPInputStream` Realiza este cambio si la respuesta puede contener varios miembros de GZIP concatenados. Selecciona `ResponseTransformer.toGzipCompatibleInputStream()` o, para un cliente asíncrono,. `AsyncResponseTransformer.toGzipCompatibleBlockingInputStream()`

Tenga en cuenta lo siguiente al migrar este código:
+ La herramienta de migración no selecciona estos transformadores automáticamente.
+ En algunas versiones de JDK, `GZIPInputStream` puedes detenerte después de que un miembro de una respuesta de GZIP concatenada responda. Esto puede suceder si el siguiente fragmento de red no ha llegado. El resultado pueden ser datos truncados y descomprimidos sin excepción.
+ Estos transformadores no descomprimen el contenido de la respuesta. Úsalos solo cuando envuelvas la transmisión devuelta. `GZIPInputStream` De lo contrario, utilice `ResponseTransformer.toInputStream()` o`AsyncResponseTransformer.toBlockingInputStream()`.

Para un cliente síncrono:

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

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

Se puede utilizar `ResponseTransformer.toGzipCompatibleInputStream(Duration)` para configurar el tiempo de espera de la primera operación de lectura.

Para un cliente así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.
}
```