

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Différences entre les opérations de streaming entre les versions 1.x et 2.x du AWS SDK pour Java
<a name="migration-streaming-ops"></a>

Les opérations de streaming, telles qu'Amazon S3 `getObject` et ses `putObject` méthodes, prennent en charge le non-blocage I/O dans la version 2.x du SDK. Par conséquent, les objets du modèle de demande et de réponse ne prennent plus un `InputStream` comme paramètre. Au lieu de cela, pour les demandes synchrones, l'objet de demande accepte`RequestBody`, qui est un flux d'octets. L'équivalent asynchrone accepte un. `AsyncRequestBody`

**Example de l'opération `PutObject` d'Amazon S3 dans la version 1.x**  

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

**Example de l'opération `PutObject` d'Amazon S3 dans la version 2.x**  

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

Un objet de réponse de streaming accepte un `ResponseTransformer` pour les clients synchrones et un `AsyncResponseTransformer` pour les clients asynchrones dans la V2.

**Example de l'opération `GetObject` d'Amazon S3 dans la version 1.x**  

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

**Example de l'opération `GetObject` d'Amazon S3 dans la version 2.x**  

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

Dans le SDK pour Java 2.x, les opérations de réponse en continu disposent `AsBytes` d'une méthode permettant de charger la réponse en mémoire et de simplifier les conversions de type courantes en mémoire.

## Migrer la gestion des réponses GZIP concaténées
<a name="migration-streaming-gzip"></a>

Lors de la migration depuis le SDK for Java 1.x, mettez à jour manuellement le code qui intègre un flux de réponse S3. `GZIPInputStream` Effectuez cette modification si la réponse peut contenir plusieurs membres GZIP concaténés. Sélectionnez `ResponseTransformer.toGzipCompatibleInputStream()` ou, pour un client asynchrone,. `AsyncResponseTransformer.toGzipCompatibleBlockingInputStream()`

Tenez compte des points suivants lorsque vous migrez ce code :
+ L'outil de migration ne sélectionne pas automatiquement ces transformateurs.
+ Sur certaines versions du JDK, vous `GZIPInputStream` pouvez vous arrêter après un membre d'une réponse GZIP concaténée. Cela peut se produire si le prochain segment de réseau n'est pas arrivé. Le résultat peut être des données décompressées tronquées sans exception.
+ Ces transformateurs ne décompressent pas le contenu de la réponse. Utilisez-les uniquement lorsque vous encapsulez le flux renvoyé`GZIPInputStream`. Sinon, utilisez `ResponseTransformer.toInputStream()` ou`AsyncResponseTransformer.toBlockingInputStream()`.

Pour un client synchrone :

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

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

Vous pouvez l'utiliser `ResponseTransformer.toGzipCompatibleInputStream(Duration)` pour configurer le délai d'expiration de la première opération de lecture.

Pour un client asynchrone :

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