正如stackoverflow上的其他帖子已经解释过的那样,当意外到达流的末尾时,会发生EOFException.
我有一个方法,可以将字节数组转换为长整数.这个字节数组是一个uint64_t数字,我通过Java绑定从C中的数据库中检索了该数字.我确实知道uint64_t并将其强制转换为长数字(带符号位)的问题.
这是我的方法:
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,所以我认为从理论上讲我不会出现这样的异常.
(如果解决方法很明显,请原谅我)