2016-06-01 1 views
0

Я пытаюсь прочитать одно байтовые целые числа из файла. Целые числа читаются правильно, однако процесс продолжает читать целое число «-1», не выбрасывая исключение EOF.Чтение из двоичного файла возвращает -1 без бросания EOFException

Вот как я пишу целые числа в файл. Я читал 4 байтовых целых числа из класса1.dat и помещал те, которые ниже 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(); 
} 

Вот как я прочитал 1 байтовые целые числа из output1.dat.

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 не выбрасывается?

ответ

1

Нет EOFException не выбрасывается, потому что вы используете метод чтения из DataInputStream, который фактически унаследованной от FilterInputStream.

И документ здесь: https://docs.oracle.com/javase/7/docs/api/java/io/FilterInputStream.html#read() говорит

Возвращает: следующие байты данных, или -1, если конец потока достигаются.

Отсутствие исключения, когда вы достигаете конца потока.

Вместо этого вы можете использовать метод readByte, который генерирует исключение EOF, когда входной поток достиг конца.

0

Если read() возвращает -1 это означает, что он достигает конца файла, как указано в Javadoc цитирую:

следующий байт данных, или -1, если конец файла достигнут.

Подробнее here

Смежные вопросы