

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Unterschiede beim Streaming-Betrieb zwischen 1.x und 2.x des AWS SDK für Java
<a name="migration-streaming-ops"></a>

Streaming-Operationen wie Amazon S3 `getObject` und `putObject` Methods unterstützen die Nichtblockierung I/O in Version 2.x des SDK. Infolgedessen verwenden die Objekte des Anforderungs- und Antwortmodells kein A mehr `InputStream` als Parameter. Stattdessen akzeptiert das Anforderungsobjekt bei synchronen Anfragen`RequestBody`, was ein Bytestrom ist. Das asynchrone Äquivalent akzeptiert eine. `AsyncRequestBody`

**Example des Amazon S3 `S3-PutObject-Betriebs` in 1.x**  

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

**Example des Amazon S3 `S3-PutObject-Betriebs` in 2.x**  

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

Ein Streaming-Antwortobjekt akzeptiert a `ResponseTransformer` für synchrone Clients und a `AsyncResponseTransformer` für asynchrone Clients in V2.

**Example des Amazon S3 `S3-GetObject-Betriebs` in 1.x**  

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

**Example des Amazon S3 `S3-GetObject-Betriebs` in 2.x**  

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

Im SDK for Java 2.x verfügen Streaming-Antwortoperationen über eine `AsBytes` Methode, um die Antwort in den Speicher zu laden und gängige Typkonvertierungen im Speicher zu vereinfachen.

## Migrieren Sie die Verarbeitung verketteter GZIP-Antworten
<a name="migration-streaming-gzip"></a>

Aktualisieren Sie bei der Migration von SDK for Java 1.x manuell den Code, der einen S3-Antwortstream einschließt. `GZIPInputStream` Nehmen Sie diese Änderung vor, wenn die Antwort mehrere verkettete GZIP-Mitglieder enthalten kann. Wählen Sie `ResponseTransformer.toGzipCompatibleInputStream()` oder, für einen asynchronen Client,. `AsyncResponseTransformer.toGzipCompatibleBlockingInputStream()`

Beachten Sie bei der Migration dieses Codes Folgendes:
+ Das Migrationstool wählt diese Transformatoren nicht automatisch aus.
+ Bei einigen JDK-Versionen `GZIPInputStream` können Sie nach einem Mitglied einer verketteten GZIP-Antwort aufhören. Dies kann passieren, wenn der nächste Netzwerkblock nicht eingetroffen ist. Das Ergebnis können ausnahmslos gekürzte dekomprimierte Daten sein.
+ Diese Transformatoren dekomprimieren den Inhalt der Antwort nicht. Verwenden Sie sie nur, wenn Sie den zurückgegebenen Stream `GZIPInputStream` einschließen. Verwenden Sie andernfalls `ResponseTransformer.toInputStream()` oder`AsyncResponseTransformer.toBlockingInputStream()`.

Für einen synchronen Client:

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

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

Sie können `ResponseTransformer.toGzipCompatibleInputStream(Duration)` es verwenden, um das Timeout für den ersten Lesevorgang zu konfigurieren.

Für einen asynchronen Client:

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