2016-06-01 9 views
0

Ich versuche, Byte-Ganzzahlen aus einer Datei zu lesen. Die Integer werden korrekt gelesen, aber der Prozess liest weiterhin die Ganzzahl "-1", ohne eine EOF-Ausnahme auszulösen.Lesen von Binärdatei gibt -1 zurück, ohne EOFException zu werfen

So schreibe ich die Integer in die Datei. Ich lese 4 Byte Integer aus class1.dat und setze diejenigen, die in output1.dat unter 256 liegen, als 1 Byte Integer.

So lese ich die 1-Byte-Ganzzahlen aus 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(); 
} 

Warum wird EOFexception nicht ausgelöst? Ich zitiere

Antwort

1

Nein EOFException geworfen wird, weil Sie die Methode Read von Datainputstream verwenden, die tatsächlich von Filterinput vererbt wird.

Und die doc hier: https://docs.oracle.com/javase/7/docs/api/java/io/FilterInputStream.html#read() sagt

Returns: das nächste Byte von Daten, oder -1, wenn das Ende des Stroms erreicht ist.

Keine Ausnahme wird ausgelöst, wenn Sie das Ende des Streams erreichen.

Sie können stattdessen die Methode readByte verwenden, die eine EOFException auslöst, wenn der Eingabestream das Ende erreicht hat.

0

Wenn read() kehrt -1 es bedeutet, dass es das Ende der Datei im javadoc wie erwähnt erreicht:

das nächste Byte von Daten, oder -1, wenn das Ende der Datei erreicht ist.

Mehr Details here