具有de-serialisazaiton循环的EOF异常

时间:2015-04-04 18:18:26

标签: java eclipse loops serialization file-io

我是Java的初学者。 我是一个项目,一个餐馆的java软件(计算机工程学生btw)。

我对我使用的某些特定功能有疑问, 我有一个文件夹,其中所有实例都被序列化(每个类一个文件夹)。

有时候,例如当有人想要预订餐桌时,我需要加载餐馆餐桌的所有实例,以检查是否有符合客户需求的餐桌。

问题是,每次我启动预订检查器时,循环都会继续...... EOF异常:

java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at Couistot.Serialisable.charger(Serialisable.java:46)
at Couistot.AppliGerant.NouvelleRes(AppliGerant.java:315)
at Couistot.AppliGerant.GererReservation(AppliGerant.java:245)
at Couistot.Test.main(Test.java:15)

现在,我在这里查看关于这个问题的内容,

  • 我们不应该读取一个空文件(我添加了一个file.exist条件)
  • 我们必须关闭ObjectOutputStream(我认为我做得正确):

我的加载/反序列化方法在这里:

public static Couistot charger(Couistot o) {
        ObjectInputStream ois;
        //On récupère maintenant les données !
        try{
            ois = new ObjectInputStream(
                    new BufferedInputStream(
                            new FileInputStream(
                                    new File(o.getClass().getName()+"/"+o.toString2()+".txt"))));
            try {
                o=(Couistot)ois.readObject();
            } 
            catch (Exception e) {
                e.printStackTrace();
            }
            ois.close();
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return o;
    }

}

这是导致我烦恼的循环:(不要介意法国评论:))

public static void annulerRes() {
        if(AppliGerant.nombreTables==0) {
            defineNombreTables();
        }
        @SuppressWarnings("resource")
        Scanner sc = new Scanner(System.in);
        String nom;
        System.out.println("Nom du client qui souhaite annuler sa reservation ?");
        nom=sc.nextLine();
        for(int i=1;i<nombreTables+(nombreTables*2);i++) {
            File f = new File("Couistot.TableResto"+"/"+"Table"+String.valueOf(i)+".txt");
            if(f.exists()) {    
                TableResto tab=new TableResto(i, null,null,0,0,false);
                tab=(TableResto) Serialisable.charger(tab); 
                if(tab.getRes().getClt().getNom()==nom) {
                    tab.setRes(null);
                    tab.setNbPlaceReservees(0);
                    tab.setReservee(false);
                }
            }
            System.out.println("Reservation annulee");

        }

    }

0 个答案:

没有答案