Duplicating byte array multiple times

Posted on

Problem

I have this code that duplicates a byte array 5 times.

class Multiple {
    public static void main(String[] args) {
        byte[] result = new byte[] {0x41,0x42,0x43,0x44};
        int len = result.length;
        byte[] multipled = new byte[len*5];
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < len; j++) {
                multipled[i*len + j] = result[j];
            }
        } 
        System.out.println(new String(multipled));
        System.out.println(new String(result));
    }
}

Example:

ABCDABCDABCDABCDABCD
ABCD

The code uses multiple loops and assignment, can it be better or shorter?

Solution

It can be made shorter:

public static void main(String[] args) {
    byte[] result = new byte[] {0x41, 0x42, 0x43, 0x44};
    byte[] multipled = new byte[result.length * 5];
    for (int i = 0; i < multipled.length; i++)
        multipled[i] = result[i % result.length];
    ...
}

This operation is worth defining as a function for clarity and reuse.

To copy an array, use System.arraycopy().

public static byte[] repeat(byte[] array, int times) {
    byte[] repeated = new byte[times * array.length];
    for (int dest = 0; dest < repeated.length; dest += array.length) {
        System.arraycopy(array, 0, repeated, dest, array.length);
    }
    return repeated;
}

Leave a Reply

Your email address will not be published. Required fields are marked *