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



作为输入,我有二进制字符串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)); }

但是这种方法太慢了。有谁能提出更好的建议吗?谢谢你

您可以不为子字符串创建对象,像这样:

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

您的方法较慢的原因是每次调用substring都会产生一个新的String对象,一旦parseByte完成它,它就有资格进行垃圾收集。

假设输入有效…

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

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

相关内容

  • 没有找到相关文章

最新更新