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 - 如果此缓冲区中剩余的字节少于四个

你只有 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;       
}}

I have tested this code, working without any issues...

于 2013-04-20T06:58:28.343 回答