适用于 Java 的 AWS SDK 1.x 和 2.x 之间的流式操作差异 - AWS SDK for Java 2.x

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 Java 的 AWS SDK 1.x 和 2.x 之间的流式操作差异

流式操作(例如 Amazon S3 getObjectputObject 方法)支持 SDK 版本 2.x 中的非阻塞 I/O。因此,请求和响应模型对象不再获取 InputStream 作为参数。相反,对于异步请求,请求对象接受 RequestBody(这是一个字节流)。异步等效项接受 AsyncRequestBody

例 1.x 中的 Amazon S3 putObject 操作
s3client.putObject(BUCKET, KEY, new File(file_path));
例 2.x 中的 Amazon S3 putObject 操作
s3client.putObject(PutObjectRequest.builder() .bucket(BUCKET) .key(KEY) .build(), RequestBody.of(Paths.get("myfile.in")));

在 V2 中,流式响应对象接受 ResponseTransformer(对于同步客户端)和 AsyncResponseTransformer(对于异步客户端)。

例 1.x 中的 Amazon S3 getObject 操作
S3Object o = s3.getObject(bucket, key); S3ObjectInputStream s3is = o.getObjectContent(); FileOutputStream fos = new FileOutputStream(new File(key));
例 2.x 中的 Amazon S3 getObject 操作
s3client.getObject(GetObjectRequest.builder().bucket(bucket).key(key).build(), ResponseTransformer.toFile(Paths.get("key")));

在适用于 Java 的 SDK 2.x 中,流式响应操作使用 AsBytes 方法将响应加载到内存中,并简化了内存中的常见类型转换。