我正在尝试将字符串转换为等值整数,以便使用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或更小的字符串引发一个异常。
有人可以帮我解决这个问题吗?
答案 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;
}}
我已经测试了这段代码,没有任何问题......