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

时间:2016-06-01 14:36:57

标签: java file eofexception

我试图从文件中读取一个字节的整数。正确读取整数,但是进程会一直读取整数“-1”而不会抛出EOF异常。

这是我将整数写入文件的方法。我从class1.dat读取4字节整数,并将output1.dat中低于256的那些整数作为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?

2 个答案:

答案 0 :(得分:1)

不会抛出EOFexception,因为您使用DataInputStream中的read方法,该方法实际上是从FilterInputStream继承的。

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

  

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

当您到达流的末尾时,不会抛出异常。

您可能希望使用方法readByte而不是在输入流到达结束时抛出EOFException。

答案 1 :(得分:0)

如果read()返回-1,则表示它到达文件的末尾,如我引用的javadoc中所述:

  

下一个数据字节,如果到达文件末尾则为-1。

更多详情here