2013-01-23 52 views
2

我試圖將字符串轉換爲等效整數,以便使用ByteBufferjava.nio.ByteBuffer)進行更快的比較。長度小於4的字符串的字節緩衝區異常

我用ByteBuffer得到了一個非常奇怪的例外。

public class LargeCompare { 

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

上面的代碼不提高對長度爲4的字符串的異常,但提出了一個用於長度爲3,少的人。

任何人都可以幫助我解決這個問題嗎?

回答

4

int是32位或4字節寬。您試圖從比此更短的緩衝區中讀取int。這就是你獲得例外的原因。

我並不真正跟隨你要去的地方,所以不會提出建議。

2

嗯,從文檔:

拋出: BufferUnderflowException - 如果是留在這個緩衝

你只需要3個字節少於四個字節。

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;  
}} 

我已經測試此代碼,沒有任何問題的工作...