6

ディスクから大きなファイルを読み込んでいます。そのファイルには、単純な古い ASCII としてエンコードされた数字だけが含まれています。現在、私はチャンクで読んでいて、次のようなことをしています:

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

つまり、文字列に変換してから、文字列を整数に解析しています。代わりに、シフトやバイナリ演算などの高速操作を使用する方法があるかどうかを知りたいですか?

これはもっと速くできると思います。たとえば、数値 1、2、3 の raw バイトは 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 の数値で 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 に答える