0

コードに問題があります。コードで readObject を使用すると IOException が発生します。プログラム全体は正しく動作しますが、readObject を使用したい場合、この例外が発生します。これは、オブジェクトを保存するために使用するコードです。

        File f = new File("employees.obj");
    ObjectOutputStream objOut = null;

    try {

        objOut = new ObjectOutputStream(new BufferedOutputStream(
                new FileOutputStream(f)));
        objOut.writeObject(newEmployee);
        objOut.flush();

        System.out.println("Object is serialized.");

    } catch (FileNotFoundException e) {
        System.out.println("File not found!");

    } catch (IOException e) {
        System.out.println("Failed!");

    } finally {

        if (objOut != null) {
            try {

                objOut.close();
            } catch (IOException e) {
            }
        }
    }

オブジェクトを復元するために使用するコードです。

    File f = new File("employees.obj");
    ObjectInputStream objIn = null;
    ArrayList<Employee> c = new ArrayList<Employee>();
    try {
        objIn = new ObjectInputStream(new BufferedInputStream(
                new FileInputStream(f)));
        while (objIn.readObject() != null) {
            Person employee = (Person) objIn.readObject();
            System.out.println("hello");
            System.out.println(employee.toString());
        }
        System.out.println(c.toString());
        return c;

    } catch (FileNotFoundException e) {
        System.out.println("1");
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        System.out.println("3");
    } catch (ClassCastException e) {
        System.out.println("4");
    } finally {

        if (objIn != null) {
            try {
                objIn.close();
            } catch (IOException e) {
                System.out.println("4");
            }
        }
    }
    return c;

そしてコンソールの結果:

at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2553)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1296)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at org.bihe.DeSerializer.deSerializeEmployees(DeSerializer.java:20)
at org.bihe.Main.enterAsManager(Main.java:238)
at org.bihe.Main.menu(Main.java:92)
at org.bihe.Main.main(Main.java:50)
4

3 に答える 3

0

2 回読むという根本的な問題に加えて、別の問題があります。EOFException は、ストリームの最後に到達したことを意味します。キャッチして、ループから抜け出します。現在、コードは readObject() がストリームの最後に null を返すと誤って想定しています。そうではありません。null を書き込んだ場合は null を返します。これは、ストリームに書き込んだ内容に完全に依存して、いつでも発生するか、まったく発生しない可能性があります。

于 2013-06-08T00:46:39.653 に答える