如何在Java中有效地将二进制字符串转换为二进制字节数组?

时间:2014-06-24 20:49:03

标签: java arrays string binary-data

作为输入,我有二进制字符串String a = "100110"。作为输出,我需要二进制字节数组byte[] b = {1,0,0,1,1,0}。 现在我正在使用

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

但这种做法太慢了。任何人都可以给出更好的建议吗?谢谢

3 个答案:

答案 0 :(得分:6)

您可以在不为子串创建对象的情况下执行此操作,如下所示:

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

您的方法较慢的原因是每次调用substring都会生成一个新的String对象,只要parseByte完成就可以进行垃圾回收。

答案 1 :(得分:5)

假设输入有效......

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

答案 2 :(得分:1)

制作int[]代替byte[],但我希望获得优雅点:

    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();