6

我正在从磁盘读取一个大文件。该文件只包含数字,编码为普通的旧 ASCII。目前,我正在分块阅读,然后做这样的事情:

byte[] token;  // bytes representing a bunch of numbers
int n = Integer.parseInt(new String(token));

换句话说,我正在转换为字符串,然后将字符串解析为整数。我想知道是否有办法使用快速运算,如移位和二进制算术?

我怀疑这可以做得更快。例如,数字 1、2、3 的原始字节为 49、50、51。任何关于黑客的想法?

4

3 回答 3

7
    int n=0;
    for(byte b : token)
        n = 10*n + (b-'0');
于 2013-03-06T01:58:11.833 回答
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;
}
于 2013-03-06T01:58:24.570 回答
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
于 2013-03-06T05:06:44.187 回答