3

正如 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,所以理论上我不应该得到这样的异常,我想。

(请原谅我,如果解决方案很明显)

4

2 回答 2

2

检查 bytearray 是否真的有 8 个字节并且不为空

于 2010-08-02T13:36:47.843 回答
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();
}
于 2010-08-02T13:40:12.243 回答