java - 我的 Java 代码中的 EOFException

标签 java eofexception

正如 stackoverflow 上的其他帖子已经解释的那样,当意外到达流的末尾时会发生 EOFException。 我有一个方法,可以将字节数组转换为长整数。这个字节数组是一个 uint64_t 数字,我通过我的 java 绑定(bind)从 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)

我不明白的是为什么我能得到那个Exception?我没有指定字节数组的长度,但我只是将字节数组传递给 ByteArrayInputStream,所以我认为理论上我不应该得到这样的异常。

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

最佳答案

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

关于java - 我的 Java 代码中的 EOFException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3388224/

相关文章:

java - 字节数组的十六进制编码形式与转换为字节数组的相同字节数组 “object” 不同。为什么?

java - ResultSet 的 Oracle JDBC 性能

java - 在 Java 调试器中,如何忽略从未通过我的代码的异常

java - 当只允许 SQLException 时,如何抛出 EOFException?

java - DataInputStream 给出 java.io.EOFException

java - Java/JNA中有类似MAKELPARAM的东西吗?

Java 锁定数组内的元素

java.io.EOFException - ActiveMQ 消息代理

java - ObjectInputStream.readObject() EOFException