有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java代码中的EOFEException

正如stackoverflow的其他帖子已经解释过的,当意外到达流的末尾时,会发生EOFEException。 我有一个方法,它将字节数组转换成一个长的数字。这个字节数组是我通过java绑定从C语言的数据库中检索到的uint64_t编号。我确实知道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,因此理论上我认为不应该出现这样的异常

(请原谅,如果解决方案显然是错误的)


共 (2) 个答案

  1. # 1 楼答案

    空数组、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();
    }
    
  2. # 2 楼答案

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