Java IOException

light2

Recruit
I'm having trouble with my code. When I use readObject in my code, I receive an IOException. The application runs normally, but when I try to use readObject, I get an exception; here is the code I use to save objects:

Java:
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) {
            }
        }
    }

and here is the code I use to restore objects:

Java:
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;

and the result in console:

Java:
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)
 
newEmployee is serializable ? serialVersionUID is added to the class representing the object? You are reading it into Person, so hope Person is a superclass of the class representing newEmployee.

Serialisation has many pitfalls, it is going out of fashion, to be replaced by conversion into first XML, and JSON these days. What is your requirement? Have you evaluated if you really need serialisation?
 
newEmployee is serializable ? serialVersionUID is added to the class representing the object? You are reading it into Person, so hope Person is a superclass of the class representing newEmployee.

Serialisation has many pitfalls, it is going out of fashion, to be replaced by conversion into first XML, and JSON these days. What is your requirement? Have you evaluated if you really need serialisation?
The problem was that i was executing the readObject() function twice in the while loop, causing the ObjectInputStream to read every other object from the stream.
 
Back
Top