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
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 menerimaRequestBody, yang merupakan aliran byte. Setara asinkron menerima sebuah. AsyncRequestBody
contoh operasi Amazon S3 putObject di 1.x
s3client.putObject(BUCKET, KEY, new File(file_path));
contoh 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
contoh operasi Amazon S3 GetObject di 1.x
S3Object o = s3.getObject(bucket, key); S3ObjectInputStream s3is = o.getObjectContent(); FileOutputStream fos = new FileOutputStream(new File(key));
contoh 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
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
GZIPInputStreamdapat 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, gunakanResponseTransformer.toInputStream()atauAsyncResponseTransformer.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. }