EOFException - comment gérer?

Je suis un débutant programmeur java à la suite de la tutoriels java.

Je suis à l'aide d'un simple Programme Java à partir de la Tutoriels Java's Flux De Données De La Page, et au moment de l'exécution, il ne cesse de montrer EOFException. Je me demandais si cela était normal, que le lecteur doit venir à la fin du fichier par la suite.

import java.io.*;

public class DataStreams {
    static final String dataFile = "F://Java//DataStreams//invoicedata.txt";

    static final double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 };
    static final int[] units = { 12, 8, 13, 29, 50 };
    static final String[] descs = {
        "Java T-shirt",
        "Java Mug",
        "Duke Juggling Dolls",
        "Java Pin",
        "Java Key Chain"
    };
    public static void main(String args[]) {
        try {
            DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)));

            for (int i = 0; i < prices.length; i ++) {
                out.writeDouble(prices[i]);
                out.writeInt(units[i]);
                out.writeUTF(descs[i]);
            }

            out.close(); 

        } catch(IOException e){
            e.printStackTrace(); //used to be System.err.println();
        }

        double price;
        int unit;
        String desc;
        double total = 0.0;

        try {
            DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(dataFile)));

            while (true) {
                price = in.readDouble();
                unit = in.readInt();
                desc = in.readUTF();
                System.out.format("You ordered %d" + " units of %s at $%.2f%n",
                unit, desc, price);
                total += unit * price;
            }
        } catch(IOException e) {
            e.printStackTrace(); 
        }

        System.out.format("Your total is %f.%n" , total);
    }
}

Il compile bien, mais la sortie est:

You ordered 12 units of Java T-shirt at $19.99
You ordered 8 units of Java Mug at $9.99
You ordered 13 units of Duke Juggling Dolls at $15.99
You ordered 29 units of Java Pin at $3.99
You ordered 50 units of Java Key Chain at $4.99
java.io.EOFException
        at java.io.DataInputStream.readFully(Unknown Source)
        at java.io.DataInputStream.readLong(Unknown Source)
        at java.io.DataInputStream.readDouble(Unknown Source)
        at DataStreams.main(DataStreams.java:39)
Your total is 892.880000.

De la Tutoriels Java's Flux De Données De La Page, il dit:

Avis que les flux de données détecte une fin-de-fichier de l'état par la capture de EOFException, au lieu de tester pour une valeur invalide en retour. Toutes les implémentations de DataInput utilisation de méthodes EOFException au lieu des valeurs de retour.

Donc, est-ce à dire que la capture de EOFException est normal, donc il suffit de l'attraper et de la manipulation est très bien, ce qui signifie que la fin de fichier est atteinte?

Si cela signifie que je doit le manipuler, merci de me conseiller sur la façon de le faire.

MODIFIER

De la des suggestions, je l'ai résolu en utilisant in.available() > 0 pour la while condition de boucle.

Ou, je ne pouvais rien faire pour gérer l'exception, parce que c'est la fin.

Retrait de la e.printStackTrace(); dans le catch bloc de supprimer l'impression de l'exception de la trace de la pile. Au lieu de l'imprimer, vous devriez peut-être le journal.

OriginalL'auteur Jonathan Lam | 2013-08-26