2010-08-02 51 views
3

由於在此處的其他帖子在stackoverflow已經解釋過,當流的結束達到意外時發生EOFException。 我有一個方法,它將一個字節數組轉換爲一個長整數。這個字節數組是一個uint64_t數字,我通過從C中的數據庫的java綁定檢索到的數據。我知道uint64_t的問題並將其轉換爲長數字(有符號位)。我的Java代碼中的EOFException

這裏是我的方法:(!)

public long castByteArrayToLong(byte[] bb){ 
    ByteArrayInputStream stream = new ByteArrayInputStream(bb); 
    DataInputStream di = new DataInputStream(stream); 
    long number=-2; 
    try { 
     number = di.readLong(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return number; 
} 

這種方法有時會拋出此異常:

java.io.EOFException 
at java.io.DataInputStream.readFully(DataInputStream.java:180) 
at java.io.DataInputStream.readLong(DataInputStream.java:399) 
at TreeManager.castByteArrayToLong(TreeManager.java:191) 
at TreeManager.test2(TreeManager.java:442) 
at TreeManager.main(TreeManager.java:72) 

我不明白的是爲什麼我能得到那個異常?我沒有指定自己字節數組的長度,但是我只是將字節數組傳遞給ByteArrayInputStream,所以理論上我不應該得到這樣的異常,我想。

(請原諒我,如果解決方案顯然是)

回答

2

檢查它是否真的具有8個字節,而不是空的ByteArray

+0

謝謝你,那確實是問題 – mkn 2010-08-02 13:40:27

2

空數組,null數組或數組少於8倍字節的原因例外。試試下面的代碼

ByteArrayInputStream stream = new ByteArrayInputStream(new byte[]{}); 
DataInputStream di = new DataInputStream(stream); 
long number=-2; 
try { 
    number = di.readLong(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+1

的問題是,我從數據庫收到的字節數組有時不是8個字節長,即使它應該... – mkn 2010-08-02 13:43:37