作为输入,我有二进制字符串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));
}
但这种做法太慢了。任何人都可以给出更好的建议吗?谢谢
答案 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();