From c4535aefbea7b22f5f9abe894527fc10962e17c0 Mon Sep 17 00:00:00 2001 From: Michael Schierl Date: Thu, 7 Sep 2017 22:13:26 +0200 Subject: [PATCH] Avoid copying from Array to list and back As Java's Lists use boxed Integers, we try to avoid the memory consumption, GC pressure and time overhead caused by copying an int[] into a List and back again. --- src/main/java/jota/utils/Signing.java | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/main/java/jota/utils/Signing.java b/src/main/java/jota/utils/Signing.java index e03543c..19cba57 100644 --- a/src/main/java/jota/utils/Signing.java +++ b/src/main/java/jota/utils/Signing.java @@ -54,29 +54,16 @@ public class Signing { curl.reset(); curl.absorb(seed, 0, seed.length); - final List key = new ArrayList<>(); - int[] buffer = new int[seed.length]; + final int[] key = new int[length * seed.length * 27]; int offset = 0; while (length-- > 0) { - for (int i = 0; i < 27; i++) { - curl.squeeze(buffer, offset, buffer.length); - for (int j = 0; j < 243; j++) { - key.add(buffer[j]); - } + curl.squeeze(key, offset, seed.length); + offset += seed.length; } } - return to(key); - } - - private int[] to(List key) { - int a[] = new int[key.size()]; - int i = 0; - for (Integer v : key) { - a[i++] = v; - } - return a; + return key; } public int[] signatureFragment(int[] normalizedBundleFragment, int[] keyFragment) {