长度小于4的字符串的字节缓冲区异常

时间:2013-01-23 20:19:19

标签: java string bytebuffer

我正在尝试将字符串转换为等值整数,以便使用ByteBufferjava.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或更小的字符串引发一个异常。

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

int是32位,或4字节宽。您试图从比此更短的缓冲区中读取int。这就是你获得例外的原因。

我并没有真正关注你的目标,所以不要提出建议。

答案 1 :(得分:2)

嗯,来自文档:

  

抛出:      BufferUnderflowException - 如果此缓冲区中剩余的字节少于四个

你只有3个字节。

答案 2 :(得分: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;       
}}

我已经测试了这段代码,没有任何问题......