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