2010-08-02 27 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