从二进制文件 returns -1 读取而不抛出 EOFException

Reading from binary file returns -1 without throwing EOFException

我正在尝试从文件中读取一个字节的整数。整数被正确读取,但是进程继续读取整数“-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?

没有抛出EOFexception,因为你使用DataInputStream的read方法,其实是继承自FilterInputStream

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

Returns: the next byte of data, or -1 if the end of the stream is reached.

到达流末尾时不会抛出异常。

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