

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Perbedaan operasi streaming antara 1.x dan 2.x dari AWS SDK untuk Java
<a name="migration-streaming-ops"></a>

Operasi streaming, seperti Amazon S3 `getObject` dan `putObject` metode, mendukung non-pemblokiran I/O di SDK versi 2.x. Akibatnya, objek model permintaan dan respons tidak lagi mengambil `InputStream` sebagai parameter. Sebagai gantinya, untuk permintaan sinkron objek permintaan menerima`RequestBody`, yang merupakan aliran byte. Setara asinkron menerima sebuah. `AsyncRequestBody`

**Example operasi Amazon S3 `putObject` di 1.x**  

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

**Example operasi Amazon S3 `putObject` di 2.x**  

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

Objek respons streaming menerima a `ResponseTransformer` untuk klien sinkron dan untuk klien asinkron di V2. `AsyncResponseTransformer`

**Example operasi Amazon S3 `GetObject` di 1.x**  

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

**Example operasi Amazon S3 `GetObject` di 2.x**  

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

Dalam SDK for Java 2.x, operasi respons streaming memiliki metode untuk memuat `AsBytes` respons ke dalam memori dan menyederhanakan konversi tipe umum dalam memori.

## Migrasikan penanganan respons GZIP gabungan
<a name="migration-streaming-gzip"></a>

Saat bermigrasi dari SDK for Java 1.x, perbarui kode secara manual yang membungkus aliran respons S3. `GZIPInputStream` Lakukan perubahan ini jika respons dapat berisi beberapa anggota GZIP gabungan. Pilih `ResponseTransformer.toGzipCompatibleInputStream()` atau, untuk klien asinkron,. `AsyncResponseTransformer.toGzipCompatibleBlockingInputStream()`

Pertimbangkan hal berikut saat Anda memigrasikan kode ini:
+ Alat migrasi tidak memilih transformator ini secara otomatis.
+ Pada beberapa versi JDK, Anda `GZIPInputStream` dapat berhenti setelah satu anggota respons GZIP gabungan. Ini bisa terjadi jika potongan jaringan berikutnya belum tiba. Hasilnya dapat dipotong data dekompresi tanpa kecuali.
+ Transformator ini tidak mendekompresi konten respons. Gunakan hanya saat Anda membungkus aliran yang dikembalikan`GZIPInputStream`. Jika tidak, gunakan `ResponseTransformer.toInputStream()` atau`AsyncResponseTransformer.toBlockingInputStream()`.

Untuk klien sinkron:

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

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

Anda dapat menggunakan `ResponseTransformer.toGzipCompatibleInputStream(Duration)` untuk mengonfigurasi batas waktu untuk operasi baca pertama.

Untuk klien asinkron:

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