【问题标题】:EOFException in my Java Code我的 Java 代码中的 EOFException
【发布时间】:2010-08-02 13:32:02
【问题描述】:

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

(如果解决办法明显,请见谅)

【问题讨论】:

    标签: java eofexception


    【解决方案1】:

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

    【讨论】:

      【解决方案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();
      }
      

      【讨论】:

      • 问题是我从数据库收到的字节数组有时不是 8 字节长,即使它应该...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多