diff --git a/.changes/next-release/feature-AWSSDKforJavav2-d4e19d2.json b/.changes/next-release/feature-AWSSDKforJavav2-d4e19d2.json new file mode 100644 index 00000000000..1490f7d94aa --- /dev/null +++ b/.changes/next-release/feature-AWSSDKforJavav2-d4e19d2.json @@ -0,0 +1,6 @@ +{ + "type": "feature", + "category": "AWS SDK for Java v2", + "contributor": "", + "description": "Avoid extra byte array copying when downloading to memory with AsyncResponseTransformer" +} diff --git a/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/async/ByteArrayAsyncResponseTransformer.java b/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/async/ByteArrayAsyncResponseTransformer.java index d1103ea2a2d..4d0fd4f33ab 100644 --- a/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/async/ByteArrayAsyncResponseTransformer.java +++ b/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/async/ByteArrayAsyncResponseTransformer.java @@ -47,7 +47,9 @@ public final class ByteArrayAsyncResponseTransformer implements @Override public CompletableFuture> prepare() { cf = new CompletableFuture<>(); - return cf.thenApply(arr -> ResponseBytes.fromByteArray(response, arr)); + // Using fromByteArrayUnsafe() to avoid unnecessary extra copying of byte array. The data writing has completed and the + // byte array will not be further modified so this is safe + return cf.thenApply(arr -> ResponseBytes.fromByteArrayUnsafe(response, arr)); } @Override