From e13b61ffe2baac9b4ed143bf700204523f80ea63 Mon Sep 17 00:00:00 2001 From: Guy Korland Date: Fri, 15 Jul 2022 01:02:04 +0300 Subject: [PATCH] =?UTF-8?q?Improve=20`ByteUtils.concatAll(=E2=80=A6)`=20ar?= =?UTF-8?q?ray=20allocations.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #2366 --- .../data/redis/util/ByteUtils.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/util/ByteUtils.java b/src/main/java/org/springframework/data/redis/util/ByteUtils.java index 63b3571b1..d199eec17 100644 --- a/src/main/java/org/springframework/data/redis/util/ByteUtils.java +++ b/src/main/java/org/springframework/data/redis/util/ByteUtils.java @@ -30,6 +30,7 @@ import org.springframework.util.ObjectUtils; * * @author Christoph Strobl * @author Mark Paluch + * @author Guy Korland * @since 1.7 */ public final class ByteUtils { @@ -71,11 +72,19 @@ public final class ByteUtils { return arrays[0]; } - byte[] cur = concat(arrays[0], arrays[1]); - for (int i = 2; i < arrays.length; i++) { - cur = concat(cur, arrays[i]); + // Sum the total result length + int sum = 0; + for (int i = 0; i < arrays.length; ++i) { + sum += arrays[i].length; } - return cur; + + byte[] result = Arrays.copyOf(arrays[0], sum); + int copied = arrays[0].length; + for (int i = 1; i < arrays.length; ++i) { + System.arraycopy(arrays[i], 0, result, copied, arrays[i].length); + copied += arrays[i].length; + } + return result; } /**