2

ByteBuffer( )を使用して比較を高速化するために、文字列を同等の整数に変換しようとしていjava.nio.ByteBufferます。

を使用して非常に特殊な例外が発生しByteBufferました。

public class LargeCompare {

    public static void main(String args[]){
        byte[]b ="zzz".getBytes();
        ByteBuffer bb = ByteBuffer.wrap(b);
        bb.getInt();
    }
}

上記のコードは、長さ4の文字列に対しては例外を発生させませんが、長さ3以下の文字列に対しては例外を発生させます。

誰かがこれを修正するのを手伝ってくれますか?

4

3 に答える 3

4

Anintは 32 ビットまたは 4 バイト幅です。intこれより短いバッファからを読み取ろうとしています。これが、例外が発生する理由です。

私はあなたがこれでどこに向かっているのかを本当にフォローしていないので、提案を控えます.

于 2013-01-23T20:22:19.567 に答える
2

ええと、ドキュメントから:

例外: BufferUnderflowException - このバッファに残っているバイト数が 4 バイト未満の場合

3バイトしかありません。

于 2013-01-23T20:23:32.830 に答える
1

これが解決策です...

public class LargeCompare {

public static void main(String args[]){
    String str = "A";
    System.out.println(bytesToInt(str.getBytes()));
}

public static int bytesToInt(byte[] byteArray){          
    int value= 0;
    for(int i=0;i<byteArray.length;i++){                
    int x=(byteArray[i]<0?(int)byteArray[i]+256:(int)byteArray[i])<<(8*i);             
        value+=x;
    }         
    return value;       
}}

このコードをテストしましたが、問題なく動作しています...

于 2013-04-20T06:58:28.343 に答える