【问题标题】:Reading from binary file returns -1 without throwing EOFException [duplicate]从二进制文件读取返回-1而不抛出EOFException [重复]
【发布时间】:2023-03-19 03:43:01
【问题描述】:

我正在尝试从文件中读取一个字节的整数。整数被正确读取,但是进程继续读取整数“-1”而不会引发 EOF 异常。

这就是我将整数写入文件的方式。我从 class1.dat 中读取 4 字节整数,并将低于 256 的整数放入 output1.dat 中作为 1 字节整数。

FileInputStream fis = new FileInputStream("D:\\class1.dat");
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
FileOutputStream fos = new FileOutputStream("D:\\output1.dat");
DataOutputStream dos = new DataOutputStream(fos);

try
{
     while(true) 
     {
         number = dis.readInt();
         System.out.println("Integer read : " + number);

         if(number < 256)
             dos.write(number);

     }
}
catch(EOFException e)
{
      dis.close();
      dos.close();
}

这就是我从 output1.dat 中读取 1 字节整数的方式。

DataInputStream dis = new DataInputStream(new FileInputStream("D:\\output1.dat"));


try
{
      int number;

      System.out.println("File with < 256");

      while(true)
      {
            number = dis.read();
            System.out.println("Number =  "  + number);
      }

}
catch(EOFException e)
{
      dis.close();
}

为什么不抛出 EOFexception?

【问题讨论】:

    标签: java file eofexception


    【解决方案1】:

    没有抛出 EOF 异常,因为您使用了 DataInputStream 中的 read 方法,该方法实际上是从 FilterInputStream 继承的。

    这里的文档:https://docs.oracle.com/javase/7/docs/api/java/io/FilterInputStream.html#read()

    返回: 数据的下一个字节,如果到达流的末尾,则为 -1。

    当您到达流的末尾时不会引发异常。

    您可能想改用readByte 方法,它会在输入流到达末尾时抛出 EOFException。

    【讨论】:

      猜你喜欢
      • 2014-06-10
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      相关资源
      最近更新 更多