Sparrow_ua
Sparrow_ua

Reputation: 704

How to convert efficiently binary string to binary byte array in Java?

As an input I have binary string String a = "100110". As output I need to have binary byte array byte[] b = {1,0,0,1,1,0}. For now I'm using

for (int i=0; i<a.length; i++) { b[i]= Byte.parseByte(a.substring(i, i+1)); }

But this approach is too slow. Can any one give a better suggestion? Thank you

Upvotes: 2

Views: 3605

Answers (3)

OldCurmudgeon
OldCurmudgeon

Reputation: 65821

Makes an int[] instead of byte[] but I hope for points for elegance:

    int[] a = "100110"
            // Turn it into a stream.
            .chars()
            // Make '0'/'1' into 0/1
            .map(c -> c - '0')
            // Roll it into an array.
            .toArray();

Upvotes: 1

roozbeh
roozbeh

Reputation: 809

Assuming the input is valid...

    byte[] b = new byte[a.length()];
    for (int i = 0; i < b.length; i++) {
        b[i] = (byte) (a.charAt(i) - '0');
    }

Upvotes: 5

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726709

You can do it without making objects for substrings, like this:

for (int i=0; i<a.length; i++) {
    b[i]= a.charAt(i)=='1' ? (byte)1 : (byte)0;
}

The reason your approach is slower is that each call to substring produces a new String object, which becomes eligible for garbage collection as soon as parseByte is done with it.

Upvotes: 6

Related Questions