我正在从磁盘读取一个大文件。该文件只包含编号为普通旧ASCII的数字。目前,我正在阅读大块,然后做这样的事情:
byte[] token; // bytes representing a bunch of numbers
int n = Integer.parseInt(new String(token));
换句话说,我正在转换为String,然后将String解析为Integer。我想知道是否有办法使用快速操作,如移位和二进制算术?
我怀疑这可以更快。例如,数字1,2,3的原始字节是49,50,51。黑客的任何想法?
答案 0 :(得分:7)
int n=0;
for(byte b : token)
n = 10*n + (b-'0');
答案 1 :(得分:2)
您不能完全使用基数10进行二进制算术,但您可以进行十进制算术运算。假设高位数字首先出现:
byte[] token;
long n = 0;
long pow = 1;
for( int i = token.length - 1; i >= 0; i-- ) {
n += (token[i]-48) * pow;
pow *= 10;
}
答案 2 :(得分:0)
试
byte[] a = { 1, 2, 3 };
for (int i = 0; i < a.length; i++) {
a[i] += '0';
}
int n = Integer.parseInt(new String(a));
System.out.println(n);
输出
123