From 449943b2d5d7035ef03452e703511316450eb26b Mon Sep 17 00:00:00 2001 From: Guy Korland Date: Fri, 15 Jul 2022 01:02:04 +0300 Subject: [PATCH 1/2] improve concatAll avoid multi result array allocations --- .../data/redis/util/ByteUtils.java | 15 +++++++++++---- 1 file changed, 11 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 63b3571b1e..a1f378f02b 100644 --- a/src/main/java/org/springframework/data/redis/util/ByteUtils.java +++ b/src/main/java/org/springframework/data/redis/util/ByteUtils.java @@ -71,11 +71,18 @@ public static byte[] concatAll(byte[]... arrays) { return arrays[0]; } - byte[] cur = concat(arrays[0], arrays[1]); - for (int i = 2; i < arrays.length; i++) { - cur = concat(cur, arrays[i]); + 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; } /** From fcfdbad98603810b8bbbaafe245c4adea86950a2 Mon Sep 17 00:00:00 2001 From: Guy Korland Date: Fri, 15 Jul 2022 01:06:49 +0300 Subject: [PATCH 2/2] add author and a comment --- .../java/org/springframework/data/redis/util/ByteUtils.java | 2 ++ 1 file changed, 2 insertions(+) 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 a1f378f02b..d199eec172 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 @@ * * @author Christoph Strobl * @author Mark Paluch + * @author Guy Korland * @since 1.7 */ public final class ByteUtils { @@ -71,6 +72,7 @@ public static byte[] concatAll(byte[]... arrays) { return arrays[0]; } + // Sum the total result length int sum = 0; for (int i = 0; i < arrays.length; ++i) { sum += arrays[i].length;