2016-06-01 5 views
0

J'essaie de lire des entiers d'un octet à partir d'un fichier. Les entiers sont lus correctement mais le processus continue de lire l'entier '-1' sans lancer une exception EOF.La lecture à partir du fichier binaire renvoie -1 sans lancer EOFException

Voici comment j'écris les entiers dans le fichier. J'ai lu les entiers de 4 octets de class1.dat et ai mis ceux qui sont au-dessous de 256 dans output1.dat comme nombres entiers de 1 byte.

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(); 
} 

Voici comment lire les entiers à 1 octet de 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(); 
} 

Pourquoi EOFexception n'est-il pas levé?

Répondre

1

Non EOFException est jeté parce que vous utilisez la méthode de lecture de DataInputStream qui est en fait héritée de FilterInputStream.

Et le doc ici: https://docs.oracle.com/javase/7/docs/api/java/io/FilterInputStream.html#read() dit

Renvoie: l'octet suivant des données, ou -1 si la fin du flux est atteinte.

Aucune exception n'est levée lorsque vous atteignez la fin du flux.

Vous pouvez utiliser la méthode readByte à la place qui déclenche une exception EOFException lorsque le flux d'entrée a atteint la fin.

0

Si read() retours -1 cela signifie qu'il arrive à la fin du fichier tel que mentionné dans le javadoc je cite:

l'octet suivant des données, ou -1 si la fin du fichier est atteinte.

Plus de détails here